Я пытаюсь выяснить правильное использование password_hash. У меня есть следующий сценарий ниже
<?php $password = "test3"; $hashAndSalt = password_hash($password, PASSWORD_BCRYPT); echo $hashAndSalt; ?>
Насколько я знаю, это должно создать соль?
Когда я запускаю скрипт, начало хэша начинается с «$ 2y $ 10 $», остаток остается неизменным при каждом запуске.
$2y$10$.YHHLeFYcQoE6c//vl587uIFTOljmpmuDnSA0w0dxo1Rrpvi5zM9m <- run one $2y$10$b6n3chpTQk1X7c0OdPp0ceZmw3GvZFsLx9FHq9RnYaJgbld915oYG <- run two $2y$10$AGffB7R1rTko8UmS1m6wT.ybG78.CkwrxqoRteNMeRPXexpSJW5iO <- run three
Должно ли это работать так? это правильный способ хранения пароля в базе данных?
$2y$10$.YHHLeFYcQoE6c//vl587uIFTOljmpmuDnSA0w0dxo1Rrpvi5zM9m | | | | | | | | | | | | | |---------------------------------Hashed Password | | |----------------------Salt | |----Cost ----Algorithm
Хэш содержит всю информацию, необходимую для проверки того, соответствует ли пароль хешу для данной строки. Вы знаете алгоритм, который он хэшировал, соль и то, что она хэшировала. Итак, все, что вам нужно сделать, это предоставить строку, передать ее по тому же алгоритму с той же солью и стоимостью, и она будет либо равна хешу, либо нет.
Поэтому, чтобы ответить на ваш вопрос, да, это должно работать так. Соль меняется каждый раз, что означает, что хешированный пароль изменяется каждый раз, но вы всегда можете проверить, не хэши паролей к тому же хэшированному паролю, потому что хэш содержит соль.