Рассмотрим эту строку кода с использованием PHP:
$password = password_hash($password, PASSWORD_DEFAULT);
Что произойдет, если они изменили алгоритм хеширования пароля по умолчанию? Я имею в виду, что я буду хэшировать пароль в базе данных. Тогда, насколько я понимаю, проверить пароль будет невозможно, поскольку алгоритм хеширования будет полностью изменен.
Что произойдет, так это то, что новые хешированные пароли будут использовать новый алгоритм — очевидно.
Тем не менее, вы не должны беспокоиться об этом, потому что все это разработано с учетом прямой совместимости — ваш код не будет нарушен при изменении алгоритма по умолчанию, пока вы используете password_*()
работает правильно.
Под правильно, я имею в виду использовать password_verify()
,
password_verify()
принимает простой текстовый пароль и хеш, и он может легко определить, что представляет собой используемый алгоритм, посмотрев на хеш, который вы передаете. Следовательно, он также сможет проверить пароль, который был хеширован с использованием старого алгоритма — не только предыдущего, но и любого поддерживаемого алгоритма.
На самом деле, единственная цель PASSWORD_DEFAULT
константой является то, что вы можете легко перенести старые хэши в новый алгоритм (после добавления одного). Это происходит следующим образом:
password_verify()
(любой алгоритм хеширования, который имеет PASSWORD_<name>
постоянная будет работать).password_needs_rehash()
и если пароль, который вы только что подтвердили, использует более старый алгоритм (или более дешевый параметр) — он вернет логическое значение ИСТИНА.
В итоге — это действительно, действительно хорошо разработанный API, и он решает для вас проблемы, о которых вы даже не задумывались. Не беспокойся об этом.
Изменить (отмечено в комментариях):
Однако следует отметить, что новые алгоритмы, скорее всего, приведут к увеличению длины хэша, поэтому, если вы храните пароли в базе данных — не ограничивайте длину поля (т. Е. Используйте varchar(255)
поле).
Просто для пояснения, я хотел бы добавить к ответу, что PHP использует следующую структуру. Таким образом password_needs_rehash()
а также password_verify()
функции проверят алгоритм и стоимость и выполнят свою работу, чтобы все было совместимо и правильно.