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では実行されません(リシャーパーを使用)。
その場合に安全でないコードが必要かどうかはわかりません(@ 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;
}
安全でないコードがなくても同じことを行うことができます。