33

我需要SecureString用于微软的课程,我在互联网上找到了以下代码:

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)。

4

2 回答 2

68

我不确定在这种情况下您是否需要不安全的代码(请参阅@mybirthname的答案)。

但是当需要不安全的代码时,可以在项目属性中启用它。

  • 在主菜单中,单击Project,然后<ProjectName> properties...
  • 点击Build页面。
  • 选择Allow unsafe code

允许不安全的代码

或者可以明确指定/unsafe编译器选项。

于 2014-09-20T22:28:34.890 回答
10
    public static SecureString GetSecureString(string password)
    {
        SecureString secureString = new SecureString();

        foreach (char c in password)
        {
            secureString.AppendChar(c);
        }

        secureString.MakeReadOnly();
        return secureString;
    }

你可以在没有不安全代码的情况下做同样的事情。

于 2014-09-20T22:33:50.013 回答