Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как хранить и проверять пароль

Короткий ответ

При регистрации сохраните в базе хеш, а не сам пароль:

<?php
 
$hash = password_hash('secret-password', PASSWORD_DEFAULT);
 
echo strlen($hash) >= 60 ? 'hash created' : 'error';

Результат:

hash created

Проверка при входе

password_verify() сравнивает введённый пароль с хешем из базы:

<?php
 
$hash = password_hash('secret-password', PASSWORD_DEFAULT);
 
var_dump(password_verify('secret-password', $hash));
var_dump(password_verify('wrong', $hash));

Результат:

bool(true)
bool(false)

Обновление хеша

Со временем алгоритм по умолчанию меняется. После успешного входа проверьте, не пора ли пересчитать хеш:

<?php
 
$hash = password_hash('secret-password', PASSWORD_DEFAULT);
 
var_dump(password_needs_rehash($hash, PASSWORD_DEFAULT));

Результат:

bool(false)

Функции из этого ответа

  • password_hash — Создаёт хеш пароля для хранения в базе.
  • password_verify — Проверяет, соответствует ли пароль хешу.
  • random_bytes — Возвращает случайные байты, пригодные для защиты.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.