试着理解password_verify PHP

时间:2016-02-15 21:41:08

标签: php hash

我正在尝试了解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变量在电子邮件中发送。

如果上面的示例不起作用,我网站上两个哈希值的比较也不会验证为真,对吧?

1 个答案:

答案 0 :(得分:3)

使用password_hash()生成的每个哈希都使用不同的盐,因此$sHash1$sHash2$sHash3都会有所不同

password_verify()用于将明文密码与散列密码进行比较,而不是将两个哈希值相互比较;使用password_verify()将$sUniqueCode与您生成的任何哈希值进行比较

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

修改

不是通过电子邮件发送密码哈希,而不是以任何方式有用,而是发送一个nonce链接以进行初始帐户访问或新密码生成