2016-02-15 24 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变量来发送。

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

+0

您可能给出了一种错误的论点,http://php.net/manual/en/function.password-verify.php –

回答

3

每个散列使用password_hash()产生盐析与不同的盐,所以$sHash1$sHash2$sHash3都将是不同

password_verify()用来比较对一个哈希密码明文密码,而不是两个哈希相互;使用password_verify()与任何已产生的

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

编辑

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

+0

啊,说明了很多。但是,'nonce链接'究竟是什么? – Abayob

+0

例如:我是否必须使用我的变量$ sUniqueCode以GET变量的形式发送邮件,然后将其与数据库中的哈希值进行比较? – Abayob

+0

如果您可以提供帮助,您不想在纯文本电子邮件中发送密码或密码。随机数将是一次性限时链接 - 阅读[OWASP关于重置密码的文章](https://www.owasp.org/index.php/OWASP_Periodic_Table_of_Vulnerabilities_-_Insufficient_Password_Recovery) –