0

私はC#を使用していますが、.Net関数PasswordDeriveBytesが他のSHA256アルゴリズムとは異なる結果を返すのはなぜか疑問に思っています。

私はそれを次のように呼んでいます:

byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);
var hash = PasswordDeriveBytes("1234567890", saltValueBytes, "SHA256", 1);
byte[] SHA256Pass = hash.GetBytes();

ハッシュc775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646を取得することを期待しています

しかし、代わりに私はb ???????? A?n?z $?] ?? 9、m ^ ???? @ n?を取得します

何が問題なのかわかりません。この関数がどのように機能するのか、そしてなぜ私が得ている結果がSHA256ハッシュのように見えないのか。

ありがとう

4

2 に答える 2

4

バイトをどのように表示していますか?それらを取得して文字列に直接変換しようとしたようです。これにより、奇妙に見える文字(および予想される文字数の約半分)が得られます。期待どおりの16進文字列への変換を行うためのいくつかのオプションについては、この回答を参照してください。

于 2012-10-25T03:58:59.497 に答える
2

PasswordDeriveBytesはハッシュ関数ではなく、鍵導出関数です。PBKDF1が設計された出力の20バイトを超えるまで、正確にPBKDF1に従います。それが起こると、それは独自の、不適切にプログラムされた、安全でない、未知のキーストレッチ機能に変わります。

PBKDF1はSHA-1を使用して鍵導出を実装します。SHA-256は、出力が大きい、かなり安全なハッシュ関数です。したがって、両方の関数で同じ出力が得られることはありません。もしそうなら、あなたは2つのうちの1つを壊したでしょう-あるいはあなたが間違いを犯した可能性がはるかに高いでしょう。

より安全でキーストレッチを提供するため、PBKDF1よりもPBKDF2を使用する必要があることに注意してください。

于 2012-10-26T12:41:01.350 に答える