Я пытаюсь понять, как работает password_verify, чтобы использовать его для сброса пароля. Я бы подумал, что это сработало бы, но хэши, похоже, не совпадают?
$sUniqueCode = uniqid('1234', true); $sHash1 = password_hash($sUniqueCode, PASSWORD_DEFAULT); $sHash2 = password_hash($sUniqueCode, PASSWORD_DEFAULT); $sHash3 = password_hash($sUniqueCode, PASSWORD_DEFAULT); echo "Hash 1: ".$sHash1."<br>"; echo "Hash 2: ".$sHash2."<br>"; echo "Hash 3: ".$sHash3."<br>"; if(password_verify($sHash1, $sHash1)) { echo "Hash 1 = hash 2 <br>"; } if(password_verify($sHash3, $sHash1)) { echo "Hash 1 = hash 3"; }
Я не получаю отголосок от двух последних условий, чего мне здесь не хватает?
контекст
Почему я хочу понять это, потому что я хочу генерировать один хэш одного и того же уникального_ида, который должен быть сохранен в базе данных, и 1 для отправки по электронной почте в виде GET-переменной.
Если приведенный выше пример не работает, сравнение двух хэшей на моем веб-сайте не будет проверяться на истинное, верно?
Каждый хэш, сгенерированный с помощью password_hash () , солен с другой солью, поэтому $sHash1
, $sHash2
и $sHash3
будут разными
password_verify () используется для сравнения пароля открытого текста с хешированным паролем, а не с двумя хэшами друг с другом; используйте $sUniqueCode
password_verify () для сравнения $sUniqueCode
с любым из хэшей, который вы создали
if (password_verify($sUniqueCode, $sHash1)) { ... }
РЕДАКТИРОВАТЬ
Вместо отправки хэша паролей по электронной почте, который никоим образом не является полезным, отправьте ссылку nonce для доступа к первоначальной учетной записи или создание нового пароля