如何将Char []或String转换为Char *以在C#中初始化SecureString?

时间:2012-01-25 13:53:34

标签: c# pointers unsafe

我正在尝试初始化SecureString,我需要Char *。 我尝试使用不安全代码块来执行此操作:

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

尝试此操作时出现此错误:

  

错误:您只能在内部获取未固定表达式的地址   一个固定的语句初始化程序

3 个答案:

答案 0 :(得分:5)

为什么不循环遍历每个char并使用AppendChar?

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

foreach(char c in s) ss.AppendChar(c);

答案 1 :(得分:1)

他们说你不应该使用那个构造函数。

你应该这样做。

char[] chars = { 'A', 'B', 'C', 'D' };
SecureString sec = new SecureString();
foreach (var c in chars) {
    sec.AppendChar(c);
}

答案 2 :(得分:0)

正如接受的答案所说,接受的方法是使用循环和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);