Давайте и соль пароля с:Подтверждение пароля хэшируются и соленая с хэш password_hash
<?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
где-нибудь?
Спасибо. Таким образом, безопасно хранить результат 'password_hash()' (содержащий соль) в моей базе данных username/pwd? – Basj
Это действительно так. Это одна из основных причин, по которой она существует. – iamgory