PHPpassword_hash()、password_verify()
在您的註冊腳本中,您使用password_hash()正確地散列密碼並將正確地散列密碼其儲存在資料庫。但是,在登入期間使用password_verify()驗證密碼時,您會遇到不符的情況。
您提供的程式碼片段顯示儲存在資料庫中的密碼經過雜湊處理(以「$2y$10$」開頭) ,而使用者輸入的密碼是純文字形式(string(1) "1" )。問題在於您從資料庫檢索密碼的方式。
在登入腳本中,您直接從資料庫結果中擷取密碼列,而不會進行任何進一步處理。然而,儲存的密碼是經過雜湊處理的,需要先對其進行未雜湊處理,然後才能與使用者使用password_verify()輸入的純文字密碼進行比較。
解決方案:
在登入腳本中,在使用password_verify()之前,您需要從資料庫擷取儲存的雜湊密碼,然後使用password_hash()函數和PASSWORD_DEFAULT演算法對其進行反散列。以下是登入腳本的更正代碼:
<code class="php">// ...same code as before... $stored_hash = $row['password']; // Retrieve the stored hashed password if (password_verify($pwd, $stored_hash)) { // ...same code as before... }</code>
此修改可確保儲存在資料庫中的密碼在與使用者輸入的純文字密碼進行比較之前正確地進行未雜湊處理,從而允許password_verify( ) 運行正確。
以上是為什麼 PHP 密碼驗證會因密碼雜湊不符而失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!