1

ソルト文字列「world」を使用してパスワード文字列「hello」をエンコード (sha512 ハッシュ) し、文字列をファイルに保存しました。

hex: 2b83319d3e78544e4430c4f5621968fee8b6ffa1254678b2c6fb98f7f79ff16afee2da909a7bb741488ca3bacbbf6cec8fd226c5a52eef805ea65a352e2ece8e

base64: K4MxnT54VE5EMMT1Yhlo/ui2/6ElRniyxvuY9/ef8Wr+4tqQmnu3QUiMo7rLv2zsj9ImxaUu74Beplo1Li7Ojg== 

今私のプログラムでは、塩漬けの「こんにちは」と新しいパスワード文字列「こんにちは」の上記のエンコードされた値があります。同じソルトを使用して「hello」を再度エンコードし、出力を比較する必要があります。上記の出力から塩を抽出することは可能ですか?

4

2 に答える 2

3

ハッシュから「ソルト」を取得することはできません。ハッシュ関数は、元に戻すことができない一方向関数です (ブルート フォースのみ)。

SHA-512 を使用していて、出力が 512 ビット長 (16 進数でエンコードされた 128 バイト) であるため、ソルトのようなものを格納する余地はありません。ソルトなどの追加データを使用してハッシュを作成する場合は、それを自分で保存するか、そのような追加データを出力にエンコードする文字列を生成する関数を使用する必要があります。

パスワードやその他の総当たり攻撃が容易なデータをハッシュしている場合は、そのようなハッシュ関数を何度も繰り返して使用します。1 回の繰り返しでは不十分なためです。これらのユースケースでは、PBKDF2、bcrypt、または scrypt を使用するのが一般的です。

于 2015-07-23T11:37:06.457 に答える
0

ソルトは、ユーザーのパスワードと連結されると、本質的にパスワードの一部になります。この複合パスワードには、ユーザーが知っている部分 (salt) と、ユーザーが知っている部分があります。優れたハッシュ関数の出力からパスワードやソルトを 1 ビットでも識別する既知の方法はありません。それらは、外部の当事者にとって、ランダム性と区別できないはずであり、元に戻すことはできません。

したがって、適切なソルトがあり、それを保存していない場合、パスワード生成の複合シードとなった連結文字列を見つけることはできません。または、少なくともそれを行うには、ほぼ永遠にかかるブルート フォースが必要です。

于 2015-08-03T09:07:19.160 に答える