我正在尝试了解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";
}
我没有得到最后两个条件的回应,我在这里缺少什么?
上下文
为什么我想理解这是因为我想生成一个相同unique_id的哈希值存储在数据库中,1个要作为GET变量在电子邮件中发送。
如果上面的示例不起作用,我网站上两个哈希值的比较也不会验证为真,对吧?
答案 0 :(得分:3)
使用password_hash()生成的每个哈希都使用不同的盐,因此$sHash1
,$sHash2
和$sHash3
都会有所不同
password_verify()用于将明文密码与散列密码进行比较,而不是将两个哈希值相互比较;使用password_verify()将$sUniqueCode
与您生成的任何哈希值进行比较
if (password_verify($sUniqueCode, $sHash1)) { ... }
修改强>
不是通过电子邮件发送密码哈希,而不是以任何方式有用,而是发送一个nonce链接以进行初始帐户访问或新密码生成