Как преобразовать Char [] или String в Char * для инициализации SecureString в C #? - PullRequest
3 голосов
/ 25 января 2012

Я пытаюсь инициализировать SecureString, и мне нужен Char * для этого. Я пытался сделать это с помощью блока небезопасного кода:

unsafe {
    char[] c = { 'A', 'B', 'C', 'D' };
    char* pointer = &(c[0]);
    SecureString sec = new SecureString(pointer, 4);
}

При попытке этого я получил эту ошибку:

Ошибка: вы можете взять только адрес нефиксированного выражения внутри инициализатора фиксированного оператора

Ответы [ 3 ]

5 голосов
/ 25 января 2012

Почему бы просто не пройти через каждый символ и использовать AppendChar?

string s = "Hello";
SecureString ss = new SecureString();

foreach(char c in s) ss.AppendChar(c);
1 голос
/ 25 января 2012

Они говорят, что вы не должны использовать этот конструктор.

Вы должны сделать это.

char[] chars = { 'A', 'B', 'C', 'D' };
SecureString sec = new SecureString();
foreach (var c in chars) {
    sec.AppendChar(c);
}
0 голосов
/ 28 ноября 2016

Как говорится в принятом ответе, принятым способом является использование цикла и AppendChar.Для удобства я создал следующий метод расширения:

public static SecureString FromClearString(this SecureString secureString, string clearString)
{
    secureString.Clear();
    clearString.ToList().ForEach(secureString.AppendChar);
    secureString.MakeReadOnly();
    return secureString;
}

Я использую его следующим образом, например:

var pwd = new SecureString();
await _security.LoginAsync("some.random.user", pwd.FromClearString("the.password"), Cts.Token);
...