4

コード:

echo password_hash("stackoverflow", PASSWORD_DEFAULT, ['salt' => 'twenty-one-characters'] );

結果:

Warning: password_hash(): Provided salt is too short: 21 expecting 22 

コード:

echo password_hash("stackoverflow", PASSWORD_DEFAULT, ['salt' => 'twenty-one-charactersA'] );

結果:

$2y$10$dHdlbnR5LW9uZS1jaGFyYOVyX13hK9eb4/KXMAkHsAJX..YR7t/32

コード:

echo password_hash("stackoverflow", PASSWORD_DEFAULT, ['salt' => 'twenty-one-charactersB'] );

$2y$10$dHdlbnR5LW9uZS1jaGFyYOVyX13hK9eb4/KXMAkHsAJX..YR7t/32

質問:

ご覧のとおり、A と B を 21 文字の文字列に追加することで、22 文字の 2 つの異なるソルトを作成しましたが、HASHES は同じです! 22文字目無視ですか?無視された場合、なぜ 22 文字のソルトを要求するのでしょうか?

4

2 に答える 2

3

BCrypt は、指定されたアルファベットのソルトを期待します: ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz. ご覧のとおり、「-」が含まれていないため、ソルトが無効です。ハッシュ値にプレーンテキストが表示される有効なソルト。

ほとんどの場合、salt パラメータを省略するのが最善です。このパラメーターがないと、関数はオペレーティング システムのランダム ソースから暗号的に安全なソルトを生成します。

password_hash("stackoverflow", PASSWORD_DEFAULT);

それにもかかわらず、BCrypt が 22 文字を完全に使用していないと言うとき、あなたは正しいです。BCrypt は、base64 でエンコードされた 22 文字で得られる 128 ビットではなく、126 ビットのソルトのみを使用しているようです。詳細については、このディスカッションを参照してください。なぜ crypt/blowfish が同じハッシュを生成するのか... .

于 2014-10-10T10:54:42.157 に答える