4

password_hash() PHP関数を使用してユーザーパスワードをハッシュしようとしていますが、この関数は定数ではなく作業ハッシュです。

<?php 
    echo password_hash('a',PASSWORD_BCRYPT,array(
            'cost' => 12
         ));
?>

4回目のテスト結果

1. $2y$12$SRmipqM7AsYkx3Xc8QGHNex69rGXeVyWGTYrh9T8sh1cP3UrdjfQi
2. $2y$12$zx.GUgtcake3wMfl3/YXXeG1.8mmHKyRruL3nWj8OmA.RbEYqeW6u
3. $2y$12$XQtmFplcehkgWLbGrOUsNOlXDU/NGrwZlt3HM88hLbUHXhjXNF4km
4. $2y$12$q9/OSZdDJw7af4Hw4MGlHeY7UMtWr9/Cj0nj/N6PaoilNoUBePt7O
4

3 に答える 3

2

定数ハッシュを使用して取得したい場合password_hash()(複数形がわからない...)、使用するときにソルトを追加します。(ただし、以下の注意を参照してください)

ドキュメントで説明されているように、そうしないと、関数を使用するたびにソルトがランダムに生成され、その結果、生成されたハッシュは一定ではなくなります。

<?php 
    echo password_hash('a',PASSWORD_BCRYPT,array(
            'salt' => $salt_defined_for_the_user,
            'cost' => 12,
         ));
?>

使用する必要がある塩については、ここから抽出したwmfranciaの適切な説明を次に示します

塩漬け

パスワードは、ハッシュする前に常にソルトする必要があります。ソルティングはランダムな文字列をパスワードに追加するため、類似したパスワードが DB で同じように表示されることはありません。ただし、ソルトが各ユーザーに固有のものでない場合 (つまり、ハードコードされたソルトを使用している場合) は、ソルトを無価値にしていることになります。攻撃者が 1 つのパスワード ソルトを見つけたら、それらすべてのソルトを取得するためです。

ソルトを作成するときは、ソルトするパスワードに対して一意であることを確認してから、完成したハッシュとソルトの両方を DB に保存します。これにより、攻撃者がアクセスできるようになる前に、各ソルトとハッシュを個別にクラックする必要があります。これは、攻撃者にとってより多くの作業と時間がかかることを意味します。


注意: 独自のソルトで定数ハッシュを取得しようとしないでください

ここでは、一定のハッシュを使用したいというあなたの意思に応えているだけですが、HalferMartinstoeckliがコメントで述べ、公式ドキュメントにも記載されているように、

注意この関数用に独自のソルトを生成しないことを強くお勧めします。指定しない場合は、安全なソルトが自動的に作成されます。

.

独自のソルトを作成するべきではありません。関数は、安全でランダムなソルトを作成するために最善を尽くします。例に示すようにユーザー固有のソルトを保存する場合、 password_hash() と同じことをとにかく行います。ハッシュ値にソルトが含まれているため、関数 password_verify() はそこから取得できます

Mike M.の answer には、代わりに使用するpassword_verify()ための詳細な説明があります。

于 2015-02-20T10:23:01.747 に答える