9

Rfc2898DeriveBytes を使用してパスワードをハッシュしています。

ただし、int を期待する GetBytes メソッドに何を渡せばよいかわかりません。

これにどのような値を渡す必要がありますか?またその理由は?

   Rfc2898DeriveBytes hasher = new Rfc2898DeriveBytes(password, System.Text.Encoding.Default.GetBytes(salt), PasswordHasher.Iterations);
      return Convert.ToBase64String(hasher.GetBytes(100));
4

1 に答える 1

7

http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.getbytes.aspxに記載されているように、GetBytes の引数は、GetBytes メソッドで生成するバイト数です。5 バイトが必要な場合は、5 を渡します。500 が必要な場合は、500 を渡します。一般に、要求するバイト数は、生成するキー (またはその他の暗号化入力) の使用目的に必要なバイト数によって異なります。

出力をよりよく理解するには、次のコマンド ライン アプリを実行してみてください。

internal static class Program
{
    private static void Main()
    {
        var deriver = new Rfc2898DeriveBytes("apples and oranges", 100, 20);
        Program.WriteArray(deriver, 5);
        Program.WriteArray(deriver, 10);
        Program.WriteArray(deriver, 20);

        Console.ReadLine();
    }

    private static void WriteArray(Rfc2898DeriveBytes source, int count)
    {
        source.Reset();
        Console.WriteLine(string.Join(" ", source.GetBytes(count).Select(b => b.ToString())));
    }
}

出力は次のようになります。

208 194 113 91 125
208 194 113 91 125 157 138 234 20 151
208 194 113 91 125 157 138 234 20 151 159 151 23 94 11 210 38 101 186 143

基本的に、選択した長さのバイトの一貫したリスト (パスワード、ソルト、および反復に基づく) を取得しています。いつでも同じ入力からまったく同じバイト リストを再生成できます。

于 2013-03-18T17:22:04.963 に答える