2016-02-15 26 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) –