Я отвечу ужасным, нарисованным рукой комиком. Второе изображение является причиной того, что result
является undefined
в вашем примере кода.
Давайте рассмотрим пример из того, что вам говорят все:
$options = [
'cost' => 11,
'salt' => 'abcdefghijklmnopqrstuv',
];
echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT, $options)."\n";
Выход:
$ 2y $ 11 $ abcdefghijklmnopqrstuu7aZVUzfW85EB4mHER81Oudv / rT.rmWm
Полужирные части - это ваши затраты и соль, соответственно встроенные в результирующий хэш.
Вы можете переплеть это обратно в
password_verify
, и он будет обрабатывать это соответственно:print_r(password_verify('rasmuslerdorf', '$2y$11$abcdefghijklmnopqrstuu7aZVUzfW85EB4mHER81Oudv/rT.rmWm')); // true
В password_hash manual указано
Используемый алгоритм, стоимость и соль возвращаются как часть хэша. Поэтому вся информация, необходимая для проверки хэша, включена в нее. Это позволяет функции password_verify () проверять хеш, не требуя отдельного хранилища для информации о соле или алгоритме.
Поэтому соль уже включена в хэш, который вы сохраняете в db.