2016-02-15 2 views
0

Я пытаюсь понять, как работает функция password_verify, чтобы использовать ее для сброса пароля. Я бы подумал, что это сработало бы, но хэши вроде бы не совпадают?Попытка понять password_verify PHP

$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"; 
} 

Я не получаю отголосок от двух последних условий, что мне здесь не хватает?

Контекст

Почему я хочу, чтобы это понять, потому что я хочу, чтобы генерировать один хэш одного и того же unique_id будут храниться в базе данных, и 1 следует отправить по электронной почте в качестве GET-переменной.

Если приведенный выше пример не работает, сравнение двух хэшей на моем веб-сайте не будет проверяться на истинное, верно?

+0

Возможно, вы, вероятно, неправильно указываете аргумент, http://php.net/manual/en/function.password-verify.php –

ответ

3

Каждого хэш генерируется с использованием password_hash() солит с другой солью, так $sHash1, $sHash2 и $sHash3 все будет отличаться

password_verify() используется для сравнения открытого текста пароля от пароля хэшированного, а не два хэш друг с другом; использовать password_verify() для сравнения $sUniqueCode с любым из хэшей, которые вы генерировали

if (password_verify($sUniqueCode, $sHash1)) { ... } 

EDIT

Вместо отправки хэша пароля через электронную почту, которая не является полезным в любом случае, отправить nonce link для начального доступа к учетной записи или генерации нового пароля

+0

А это объясняет многое. Но что же такое «связь nonce»? – Abayob

+0

Например: Должен ли я использовать переменную $ sUniqueCode для отправки по почте как GET-переменной, а затем сравнить ее с хэшированной в базе данных? – Abayob

+0

Вы не хотите отправлять пароль, любой пароль, в электронном виде, если вы можете ему помочь. В противном случае будет одноразовая ссылка с ограничением по времени - прочитайте [эту статью OWASP о сбросе пароля] (https://www.owasp.org/index.php/OWASP_Periodic_Table_of_Vulnerabilities_-_Insufficient_Password_Recovery) –

Смежные вопросы