-1

パスワードをハッシュしてソルトしましょう:

<?php
$hash = password_hash('bonjour', PASSWORD_BCRYPT,  ['cost' => 12, ]);
// no salt option mentionned 
// then salt will be generated randomly, see password_hash documentation     
echo $hash;
?>

ページのリロードごとに結果が変わります。これは正常です。ソルトはランダムに生成されます。

$2y$12$FlxBBjTjelKkGY.SJarlL.THUZBwcl7M6V35DmZmTmYJZRwhpRkIW
$2y$12$p2pkD116hBHNc/2nyQ2WyOkrn.h8xvWvM1.Lmvsnhms2Y6zsb.j1e
$2y$12$u4ipdQQM926jfanpXnwtkupv2CH/uWoPvK563tG7p.z35GcOBOZdS
etc.

前のコードでは、ソルトはどこにも保存されていないようです (間違っていますか?)。しかし、最後password_verifyにハッシュを使用してパスワードを確認することができ、ソルトが何であるかに関係なく、すべての結果で機能します。

<?php
echo password_verify('bonjour', '$2y$12$FlxBBjTjelKkGY.SJarlL.THUZBwcl7M6V35DmZmTmYJZRwhpRkIW') ? 'yes' : 'no';
// yes
echo password_verify('bonjour', '$2y$12$p2pkD116hBHNc/2nyQ2WyOkrn.h8xvWvM1.Lmvsnhms2Y6zsb.j1e') ? 'yes' : 'no';
// yes
?>     

どこかpassword_verifyに保存しなくてもパスワードを確認できるのは普通ですか?salt

4

1 に答える 1

1

PHP.netのマニュアルより

Note that password_hash() returns the algorithm, cost and salt as part of the returned hash. Therefore, all information that's needed to verify the hash is included in it. This allows the verify function to verify the hash without needing separate storage for the salt or algorithm information.

基本的に、ソルトはハッシュにエンコードされます。

于 2014-10-08T10:57:49.710 に答える