web-dev-qa-db-ja.com

安全でない状況で安全でないコードを使用する方法?

Microsoftのクラスには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では実行されません(リシャーパーを使用)。

30
CodeArtist

その場合に安全でないコードが必要かどうかはわかりません(@ mybirthnameの回答を参照してください)。

ただし、安全でないコードが必要な場合は、プロジェクトのプロパティで有効にすることができます。

  • メインメニューでProjectをクリックし、次に<ProjectName> properties...をクリックします。
  • Buildページをクリックします。
  • Allow unsafe codeを選択します。

Allow unsafe code

または、明示的に / unsafe コンパイラー・オプションを指定できます。

62
AlexD
    public static SecureString GetSecureString(string password)
    {
        SecureString secureString = new SecureString();

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

        secureString.MakeReadOnly();
        return secureString;
    }

安全でないコードがなくても同じことを行うことができます。

10
mybirthname