我正在尝试初始化SecureString,我需要Char *。 我尝试使用不安全代码块来执行此操作:
unsafe {
char[] c = { 'A', 'B', 'C', 'D' };
char* pointer = &(c[0]);
SecureString sec = new SecureString(pointer, 4);
}
尝试此操作时出现此错误:
错误:您只能在内部获取未固定表达式的地址 一个固定的语句初始化程序
答案 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);