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 に答える