Рубрики
Uncategorized

Использование password_hash для хэширования и хранения паролей в PHP

PHP предлагает очень мощную функцию password_hash, которая создаст односторонний хэш строки. Это… С пометкой php, безопасность.

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”