經過一些故障排除後,我確定當我使用PHP的password_hash函數對密碼進行哈希處理時,加密標識符是$ 2y $。但是,當我使用password_verify函數將存儲的散列密碼與用戶輸入密碼進行比較時,password_verify將不會返回true。如果我使用https://www.bcrypt-generator.com/上的$ 2a $標識符生成一個新密碼,並用它替換存儲的散列密碼,它將返回true。爲什麼php password_verify和password_hash使用不同的加密標識符?
我希望有人能解釋爲什麼password_hash($ password,PASSWORD_DEFAULT)使用$ 2y $和爲什麼password_verify()使用$ 2a $。或者我可能在這裏做錯了任何事情。我在運行PHP Version 7.0.10的WAMP服務器上本地執行此操作。
以下是我遇到問題的代碼示例($ 2y $ identifier不會返回true)。
<?php
// $hashNotWorking came from password_hash("testing", PASSWORD_DEFAULT)."\n";
$hashNotWorking = '$2y$10$DNPos6f7Vo4Z2IrYU./eCObD7BMkwlkK9yiYjb0hvnI14B1dbFHbC';
if (password_verify('testing', $hashNotWorking)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
?>
這裏是使用的代碼(由password_hash功能不產生$ 2A $加密)的一個例子。
<?php
// $hashWorking came from https://www.bcrypt-generator.com/
$hashWorking = '$2a$08$uP75n/pDhUZo6qOOM3DuPug5U2fcSXW4f3MUz8p3SlO5yPZ4fLf9O';
if (password_verify('testing', $hashWorking)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
?>
在此先感謝您的幫助。
http://stackoverflow.com/questions/4795385/how-do-you-use-bcrypt-for-hashing-passwords-in-php#comment8558243_6337021看到該評論和該頁面上的其他內容。 –
我懷疑你發佈了第一個被正確散列的東西。確保散列期間沒有引入換行符或
;我以前見過這種情況。 –
謝謝弗雷德。我使用的是「\ n」,因爲這就是php.net的例子。我也試過沒有,仍然不能得到真實的。我正在閱讀你現在發佈的鏈接。試圖做更多的研究。 –