2

リモート インターフェイスを備えたデスクトップ アプリケーションがあります。リモート インターフェイスへのアクセスは、ユーザー名とパスワードによって保護されます。

これらのパスワードを安全に、できればレジストリに保存する最善の方法は何でしょうか?

4

2 に答える 2

7

ハッシュ化されていないパスワードを保存する必要がある場合は、ProtectedData クラスの使用を検討してください。これは、Windows でデータを保護する最良の方法であるData Protection API (DPAPI)を利用します。

以下は、ProtectedData をラップし、String でデータを暗号化および復号化する 2 つの拡張メソッドを提供する小さなクラスです。

public static class DataProtectionApiWrapper
{
    /// <summary>
    /// Specifies the data protection scope of the DPAPI.
    /// </summary>
    private const DataProtectionScope Scope = DataProtectionScope.CurrentUser;

    public static string Encrypt(this string text)
    {
        if (text == null)
        {
            throw new ArgumentNullException("text");
        }

        //encrypt data
        var data = Encoding.Unicode.GetBytes(text);
        byte[] encrypted = ProtectedData.Protect(data, null, Scope);

        //return as base64 string
        return Convert.ToBase64String(encrypted);
    }

    public static string Decrypt(this string cipher)
    {
        if (cipher == null)
        {
            throw new ArgumentNullException("cipher");
        }

        //parse base64 string
        byte[] data = Convert.FromBase64String(cipher);

        //decrypt data
        byte[] decrypted = ProtectedData.Unprotect(data, null, Scope);
        return Encoding.Unicode.GetString(decrypted);
    }

}
于 2009-11-17T12:32:44.527 に答える
4

ハッシュ化されたパスワードを保存する必要があります (レジストリまたは別の場所に)。次に、ユーザーがパスワードを入力すると、入力したもののハッシュ化されたバージョンと、保存されているハッシュ化されたバージョンをチェックします。これらが一致する場合、パスワードが一致し、ユーザーを許可できます。

このようにして、パスワードを平文で保存して、他の誰か (自分自身を含む) がアクセスしてアクセスできるようにすることはありません。

どのハッシュ アルゴリズムを使用するかについては、わかりません。たくさんの選択肢があるので、ブラインドをお勧めするのは気が進まない. いくつか見つけて評価することをお勧めします。CSharpFriendsには、良い出発点になりそうな記事があります。

于 2009-11-17T12:24:17.057 に答える