3

データベースにあり、このように生成されたソルトがあると仮定します

$salt = time();

これらの2行の違いは何ですか。

$pass1 = hash('sha1', $password . $salt);

$pass2 = hash_hmac('sha1', $password, $salt);

それらは同じ出力を生成しません。最初のもの、hash関数は 2 つのパラメーターを取り、hash_hmac3 つのパラメーターが必要です。$saltしたがって、2 行目で行ったようにパスワード ( ) と連結するのではなく、(3 番目のパラメーターを満たすために) 個別に使用することで、3 番目の追加パラメーターを取得できると考えるでしょう$password . $salt。しかし、それほど単純ではなく、2 つの結果は次のようになります。違う。なんで?ここで正確に何が起こっているのですか?

4

1 に答える 1

15

HMAC SHA-1 は、メッセージとキーが連結された SHA-1 と同じではないためです。HMAC は に似sha1($salt . sha1($salt . $password))ていますが、正確ではありません。ウィキペディアには、HMACの優れた説明があります。

于 2009-10-27T08:31:32.460 に答える