2

以前の質問で、暗号化する代わりにパスワードをハッシュするように言われましたが、それは正しいことがわかりました。問題は、これまでパスワードのハッシュを扱ったことがないことです。すべてのドキュメントには、テスト アカウントで使用しようとした SHA512 が役に立たなかったと書かれています。ここからどこへ行けばいいのかわからない。コードのコメントは、彼らが呼び出す「暗号化された」文字列の例を示しています。これは「FA35A0194E3BE7024CEFB1839CBFC922」であり、SHA512 でそのようにフォーマットする方法がわかりません。ComputeHash()方法:

byte[] hashedPassword = HashAlgorithm.Create("SHA512").ComputeHash( ??? );

アップデート

バイトで UTF8Encoding.GetString を出力しようとしましたが、例のドキュメントとはまったく似ていないでたらめな文字が表示されるだけです。

4

3 に答える 3

5

プレーンな SHA-512 によるハッシュはまだ間違っています。Rfc2898DeriveBytes を介して公開されているPBKDF2を使用します。

16 進数または base64 でエンコードする必要がある raw バイトを返します。

次の方法で 16 進エンコードを実行できます。

BitConverter.ToString(bytes).Replace("-","")
于 2012-04-25T21:56:51.130 に答える
1

こちらのチュートリアルをご覧ください: http://www.obviex.com/samples/hash.aspx

チュートリアルから: 「これらのコード サンプルは、データをハッシュしてハッシュを検証する方法を示しています。いくつかのハッシュ アルゴリズムをサポートしています。辞書攻撃のリスクを軽減するために、コードは、生成する前に元のプレーン テキストにランダムなバイト (いわゆるソルト) を付加します。ハッシュし、生成された暗号文に追加します (ハッシュの検証には元のソルト値が必要です)。結果の暗号文は base64 でエンコードされます。重要: データ ハッシュを復号化してプレーン テキストに戻すことはできません"

于 2016-05-30T15:04:16.380 に答える
1

それは 128 なので 512 と言ったことは確かですが、とにかく次のようなものを使用できます

System.String Hashed = System.BitConverter.ToString(((System.Security.Cryptography.SHA512)new System.Security.Cryptography.SHA512Managed()).ComputeHash(System.Text.Encoding.ASCII.GetBytes("NotHashedPass"))).Replace("-","");

MessageBox.Show(Hashed);

しかし、少なくとも塩を使用することをお勧めします。

于 2012-04-25T21:50:47.307 に答える