3

プロジェクトに SecureString を実装しています。それを読んで、基本的に同じことをしている多くの例を見た後、私は何かが間違っていると考え続けています.

たとえば、次のコードを見てください。

public static string ToUnsecureString(this SecureString secureString)
{
    if(secureString == null)
        throw new ArgumentNullException("secureString");

    IntPtr unmanagedString = IntPtr.Zero;
    try
    {
        unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(secureString);
        return Marshal.PtrToStringUni(unmanagedString);
    }
    finally
    {
        Marshal.ZeroFreeGlobalAllocUnicode(unmanagedString);
    }
}

データが保護されていることは素晴らしいことですが、最終的に標準の文字列に再び設定されるだけで、実際には何の意味があるのでしょうか?

char[]パスワードを に保存し、 を作成した後にゼロにできることはわかっていますがSecureString、文字列を取得するときに何をすればよいでしょうか? それを として取得する方法がわかりませんでした。また、メモリに返された文字列をchar[]呼び出すだけではありませんか?.ToCharArray()Marshal.PtrToStringUni(...)

私は非常に基本的な何かを見逃していますか?ありがとう。

4

1 に答える 1