7

私はC#で次のコードを持っています

PasswordDeriveBytes DerivedPassword = new PasswordDeriveBytes(Password, SaltValueBytes, HashAlgorithm, PasswordIterations);
byte[] KeyBytes = DerivedPassword.GetBytes(32);

「SHA1」ハッシュアルゴリズムを使用しています。

SHA1の定義によれば、160ビット(20バイト)のキーを生成します。私の質問は、GetBytesメソッドがDerivedPasswordから32バイトを取得する方法ですが、GetBytesメソッドの背後でどのアルゴリズムが使用されていますか?

4

3 に答える 3

11

Microsoft の元の PKCS#5 (別名 PBKDF1) の実装には、安全でない拡張機能が含まれており、ハッシュ関数が提供できるよりも多くのバイトを提供します (こちらこちらのバグ レポートを参照してください)。

バグがなかったとしても、文書化されていない独自の標準拡張を避ける必要があります (そうしないと、将来、データを復号化できなくなる可能性があります。少なくとも Windows 以外では可能です)。

.NET 2.0 以降で利用可能な PBKDF2 (PKCS#5 v2) を実装する新しいものを使用することを強くお勧めします。Rfc2898DeriveBytes

于 2012-02-10T19:22:34.690 に答える
5

GetBytes メソッドの背後で使用されるアルゴリズムは何ですか?

これはアルゴリズム PBKDF1 を使用しますが、これは任意のキーの長さを許可するようにわずかに変更されています。代替クラスは、Rfc2898DeriveBytesPBKDF2 を使用します。

PBKDF2 に関するウィキペディアの記事を読んで、この作業を行っている基本的な概念についての一般的な考えを知ることができます。

于 2012-02-10T17:12:18.003 に答える