為什麼 PHP 密碼驗證會因密碼雜湊不符而失敗?

Linda Hamilton
發布: 2024-10-21 07:04:02
原創
661 人瀏覽過

Why does PHP password verification fail with a password hash mismatch?

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中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板