@romicohen
Системный Архитектор

По какому волшебству в Laravel работает Hash::check() — ведь хэши генерируемые Hash::make() всегда разные?

сабж :)

Я реально не понимаю, как получается, что:

1. У одной строки может быть несколько (кстати, а сколько их всего там для одной строки?) хэшей?

2. Каким чудесным Hash::check() узнает что разные хэши происходят из одной и той же строки?

Как такое вообще получается?
  • Вопрос задан
  • 390 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если посмотрите на хэш, то его можно разделить на несколько частей
$2y$10$jSAr/RwmjhwioDlJErOk9OQEO7huLz9O6Iuf/udyGbHPiTNuB3Iuy
2y - тип хэша, BCRYPT.
10 - алгоритмическая сложность bcrypt.
jSAr/RwmjhwioDlJErOk9 - 21 символ соли.
OQEO7huLz9O6Iuf/udyGbHPiTNuB3Iuy - собственно хэш.
При генерации хэша задаётся случайная соль, поэтому хэш каждый раз разный.
При проверке пароля параметры хэширования берутся из строки проверяемого хэша, поэтому при правильном пароле хэши совпадут.
Ответ написан
REZ1DENT3
@REZ1DENT3
web-developer
Hash::check, Hash::make внутри дергает стандартные функции php.

https://www.php.net/manual/ru/function.password-ha...
https://www.php.net/manual/ru/function.password-ve...

Разные результаты получаются из-за разной соли, которую генерирует password_hash.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@cicatrix
было бы большой ошибкой думать
1. У одной строки может быть несколько (кстати, а сколько их всего там для одной строки?) хэшей?

Это неверно. У одной строки может быть только один хэш (иначе бы эта функция не соответствовала бы определению хэш-функции). Верно наоборот - один и тот же хэш может быть результатом хэш-функции от разных строк, это называется коллизия.

2. Каким чудесным Hash::check() узнает что разные хэши происходят из одной и той же строки?

Из неверного предположения в п. 1 идёт неверный вывод о чуде в п. 2.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы