如何在安全比赛中使用不安全的代码?
我需要使用SecureString
了微软的类,我发现下面的代码在internet:如何在安全比赛中使用不安全的代码?
public static class SecureStringExt
{
public static SecureString ConvertToSecureString(this string password)
{
if (password == null)
throw new ArgumentNullException("password");
unsafe //Red highlighted line
{
fixed (char* passwordChars = password)
{
var securePassword = new SecureString(passwordChars, password.Length);
securePassword.MakeReadOnly();
return securePassword;
}
}
}
}
唯一的问题是,unsafe
关键字不断抛出我的错误说Cannot use unsafe construct in safe context
。 可惜我找不到为什么会这样......
注: 上面的代码中LINQPad运行,而不是在VS2013(与ReSharper的)。
我不确定在这种情况下是否需要不安全的代码(请参阅@mybirthname的答案)。
但是,当需要不安全的代码时,可以在项目属性中启用它。
- 在主菜单中,单击
Project
然后<ProjectName> properties...
- 单击
Build
页面上。 - 选择
Allow unsafe code
。
或者一个可以明确指定/unsafe编译器选项。
public static SecureString GetSecureString(string password)
{
SecureString secureString = new SecureString();
foreach (char c in password)
{
secureString.AppendChar(c);
}
secureString.MakeReadOnly();
return secureString;
}
您可以在没有不安全代码的情况下做同样的事情。
在这个例子中,你浪费了一个循环。这段代码较慢。 – CodeArtist 2014-11-28 15:14:02
好的,感谢您的意见:) – mybirthname 2014-11-28 15:16:41
注意构造函数[MSDN](https://msdn.microsoft.com/en-us/library/7y8s44by(v = vs.110).aspx)的示例使用非常与循环相似的代码... – 2015-07-22 16:56:37
我不明白为什么你需要在这里使用不安全的,你创建安全的字符串没有不安全的代码。检查我的答案。 – mybirthname 2014-09-20 22:33:13
该文件说你不应该使用该构造函数。请参阅http://msdn.microsoft.com/en-us/library/176bafkd(v=vs.110).aspx使用代码@mybirthname给出的答案 – MicroVirus 2014-09-20 22:39:36