PHP предлагает очень мощный password_hash функция, которая создаст односторонний хэш строки. Он часто используется для хеширования паролей и маркеров доступа.
Мы можем передать алгоритм в password_hash , но я сосредоточусь на PASSWORD_DEFAULT , который представляет собой встроенный алгоритм, предназначенный для изменения с течением времени по мере разработки более сильных алгоритмов.
Если вы хотите прочитать о других встроенных алгоритмах, предлагаемых PHP, в официальной документации по хэшированию паролей объясняется каждый из них.
В любом случае, password_hash довольно прост. Первый параметр – это строка для хэширования (в данном случае “dragon123”). Второй параметр – это алгоритм для хэширования строки.
$password = 'dragon123'; $hash = password_hash($password, PASSWORD_DEFAULT); // As of writing this, $hash returns this monstrous string: // "$2y$10$WIj56IGASADOa26io1AzeuMRvp3SKdYu8saCU.6.1xDpnr3w6xECS"
Помните, что алгоритм PASSWORD_DEFAULT может изменяться с течением времени, поэтому в будущем этот код может выдать вам другой результат.
Кроме того, я хочу повторить предложение официальной документации, чтобы убедиться, что ваш столбец базы данных хэшированных паролей поддерживает строки длиной до 255 символов, что, вероятно, обеспечит будущую совместимость.
Проверка хэшированных паролей с помощью password_verify
Проверка хэшированного пароля так же проста, благодаря password_verify .
Первым параметром является строка открытого текста для проверки, а вторым параметром является хэшированный строка для проверки первой строки.
$password = 'dragon123'; $hash = '$2y$10$WIj56IGASADOa26io1AzeuMRvp3SKdYu8saCU.6.1xDpnr3w6xECS'; $result = password_verify($password, $hash);
Эта функция вернет логическое значение, либо true или false , в зависимости от того , является ли первая строка допустимой:
if ($result === true) {
echo "Successfully authenticated."
} else {
echo "Invalid password."
}
Если dragon123 передан, $результат будет истинным . Однако, если dragon456 или что-то еще будет передано, $результат будет ложным .
Вывод
Хотя это, безусловно, не является современным, это отличный шаг для большинства небольших веб-сайтов и стартапов, который, по крайней мере, намного опережает использование пользовательской соли (не говоря уже о хранении паролей в открытом тексте).
Оригинал: “https://dev.to/natclark/using-passwordhash-to-hash-and-store-passwords-in-php-3mo3”