Описание тега php-password-hash
password_hash()
, функция php, возникла из-за необходимости легко защищать пароли таким образом, чтобы хэш нельзя было легко взломать, если злоумышленник получит таблицу, содержащую хешированные пароли.
Хотя лежащий в основе алгоритм хеширования был легко доступен через функцию PHP crypt(), собрать воедино все необходимые элементы, чтобы эта функция работала, было недоступно большинству программистов. В результате многие новые программисты обратятся к небезопасным системам хэширования sha1 и md5, которые существуют уже давно.
Хеш пароля просто предоставляет оболочку дляcrypt()
, используя BCRYPT. Система по умолчанию генерирует случайную соль (рекомендуется) и возвращает хеш, содержащий соль, стоимость и хешированный пароль. Передача этой строки обратно в password_verify() вместе с паролем в виде обычного текста сообщит вам, совпадают ли они.
$pass = 'password';
$hash = password_hash($pass, PASSWORD_DEFAULT);
// $hash now contains a string that looks like
// $2y$10$WNxIiMP4o7EevZKNL01T4uwux1TvOhFRj31XVfG7lQV7HhVY5tsIK
$verify = password_verify($pass, $hash);
var_dump($verify); // bool(true)
Хеширование паролей встроено в PHP 5.5.0 или новее, однако для PHP 5.3.7 или новее существует совместимая библиотека, которая работает таким же образом.
- Официальная документация PHP
- Предложение PHP RFC для password_hash()
- пакет совместимости password_compat для PHP 5.3.7+