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