Как проверить два хешированных пароля, которые были хэшированы с помощью функции php password_hash()

Есть ли способ расшифровать пароль или, по крайней мере, проверить, есть ли два хэша (хешированные с помощью password_hash()) дает то же значение, если не хешировано?

Поскольку у меня есть страница токена, которая содержит хешированный пароль, и таблица пользователей, которая также содержит хешированный пароль, и я хочу проверить, совпадают ли пароли, но проблема в том, что password_hash() не всегда дает одно и то же значение, даже если пароль то же самое и password_verify() нужно, чтобы одно значение было обычным текстом, так как я могу убедиться, что пароль токена и пароль пользователя совпадают?


person googol    schedule 04.09.2020    source источник
comment
Хеширование паролей невозможно   -  person jps    schedule 04.09.2020
comment
@jps, тогда как я узнаю, совпадают ли пропуск токена и проход пользователя   -  person googol    schedule 04.09.2020
comment
Вы вычисляете хэш из простого текстового пароля, а не наоборот.   -  person Álvaro González    schedule 04.09.2020


Ответы (1)


Вы не можете, и точка. В этом весь смысл password_hash и его случайной соли: если у вас есть два хэша, вы не знаете, относятся ли они к одному и тому же паролю. Это предотвращает взлом всей базы данных хэшей злоумышленником, поскольку злоумышленник не может амортизировать время перебора, вложенное в один хэш, путем сопоставления других хэшей.

person deceze♦    schedule 04.09.2020
comment
Тогда как я узнаю, что они одинаковы - person googol; 04.09.2020
comment
Вы не знаете. Вам нужен открытый текстовый пароль и проверить оба против него. - person deceze♦; 04.09.2020
comment
Поэтому я должен хранить нехешированный пароль в базе данных токенов. - person googol; 04.09.2020
comment
Боже нет, это в первую очередь подрывает весь смысл хеширования паролей! Например, вы можете выполнить сравнение, когда пользователь входит в систему. В этот момент у вас есть открытый текстовый пароль, и вы можете сравнить с ним оба хэша. Я не знаю, почему вы хотите, но это один из вариантов. Кроме того, вы должны подумать о том, зачем вам вообще нужны эти два отдельных хэша. - person deceze♦; 04.09.2020
comment
@googol Если вы можете сломать свою систему паролей, вам вообще не следует ее использовать. Эквивалентом слесаря ​​будет сброс пароля. - person Álvaro González; 04.09.2020
comment
+1. Если в приложении или бизнес-процессе есть проверка на наличие у двух пользователей одного и того же пароля в соответствии с требованием, этот рабочий процесс в корне ошибочен и нуждается в перепроектировании. Другими словами: если система может выдать информацию о содержании чьего-то пароля. эта система сломана и опасна. - person Royce Williams; 04.09.2020