Я установил мое хэширование пароля с помощью функций PHP password_*
1) password_hash($password, PASSWORD_BCRYPT, array("cost" => 11);
2) return password_verify($password, $hashedPassword)? true : false;
return password_verify($password, $hashedPassword)? true : false;
Все работает нормально.
Я также нашел функцию password_needs_rehash (), которая имеет 2 параметра, $ hashedPassword и алгоритм, например:
password_needs_rehash ($ hashedPassword, PASSWORD_BCRYPT);
Я понимаю использовать это, когда он изменяет алгоритм или стоимость, что-то вроде:
if (!password_verify($password, $hashedPassword)) { return false; } if (password_needs_rehash($hashedPassword, PASSWORD_BCRYPT)) { $hashedPassword = password_hash($password, PASSWORD_BCRYPT); // update user password in database with $hashedPassword } return true;
Все ясно, я просто сомневаюсь.
Я пытаюсь изменить стоимость, не вызывая функцию password_needs_rehash (), и я могу войти в систему.
Я также пытаюсь изменить свою функцию, которая генерирует хэш, я меняю алгоритм с PASSWORD_BCRYPT на PASSWORD_DEFAULT.
Я всегда могу войти.
Может кто-нибудь объяснить, как это работает?
Если мы не изменим алгоритм, когда алгоритм изменится, как PHP password_ * справится с этим?
PS Маленький вопрос в вопросе … Использование php function_ * ли raccomanded использовать «соль» для пароля или нет?
Благодаря!!
Используемый алгоритм и его стоимость встроены в хэш-код пароля. Это первая пара писем:
$2y$10$abcdefg...123456789... | | | | | | | +- the password hash | | +- the salt | +- the cost parameter +- the algorithm type
(См. Также https://stackoverflow.com/a/16736254/476 )
Таким образом, при проверке пароля password_verify
знает, какой алгоритм использовать.
Использование проверки необходимости повторного использования пароля заключается в том, чтобы убедиться, что алгоритм и фактор затрат, встроенный в хэш, все те же, что и те, которые вы хотели бы использовать. Если они не совпадают, вы должны перефразировать пароль с новой конфигурацией.
Типичное использование заключается в том, что со временем вы увеличите коэффициент затрат, поскольку аппаратное обеспечение ускорится и может обрабатывать хэширование с большими затратами. Это не приведет к неожиданному аннулированию старых паролей, которые все еще будут подтверждены с использованием старых настроек, встроенных в хэш. Однако, поскольку на момент проверки у вас есть пароль открытого текста, вы должны использовать эту возможность для обновления хэша с более новыми настройками.