在PHP中的密碼雜湊問題 - password_verify()總是回傳false
P粉481035232
P粉481035232 2023-07-30 14:51:07
0
1
505
<p>我在PHP中遇到了密碼雜湊的問題。我在註冊時使用password_hash()函數對管理員密碼進行雜湊處理,並將其儲存在資料庫中。然而,在登入時,當我嘗試使用password_verify()驗證密碼時,它總是回傳false,儘管我確定密碼是正確的。 </p><p>以下是我的程式碼摘要:</p><p><br /></p> <pre class="brush:php;toolbar:false;">$adminPassword = "test123"; $adminPasswordHash = password_hash($adminPassword, PASSWORD_BCRYPT); // ... Store $adminPasswordHash in the database ... // During login: $adminInputPassword = "test123"; $adminPasswordHashVERIFY = "$2y$10$o4qspRTirOSdyGtwHCxt6ee2i0BNChl3mEPazxVbmb534kw3ACHCm"; if (password_verify($adminInputPassword, $adminPasswordHashVERIFY)) { echo "Password is correct!"; } else { echo "Password is incorrect!"; }</pre> <p>我確保$adminPassword和$adminInputPassword具有相同的值,但驗證始終傳回false。我還嘗試使用password_hash()函數並將PASSWORD_DEFAULT作為參數,而不是PASSWORD_BCRYPT,但結果相同。 </p><p>在雜湊生成或驗證過程中,我是否遺漏了什麼?對於這個問題的任何幫助或見解將不勝感激。謝謝! </p><p><br /></p>
P粉481035232
P粉481035232

全部回覆(1)
P粉099000044

我找到問題所在了!問題似乎是由於在$adminPasswordHashVERIFY變數中使用雙引號(")引起的。當使用雙引號時,PHP會解釋字串並替換其中的變數。由於沒有名為$fReIQ的變量,PHP將其視為未定義的變量,導致驗證時產生錯誤的哈希值。

要解決這個問題,在$adminPasswordHashVERIFY變量中使用單引號(')引起哈希密碼。這樣可以確保哈希密碼被視為普通字串,而不是由PHP解釋。

現在,如果你嘗試以下程式碼,你將得到輸出"密碼正確! "。


#
<?php
$adminPassword = "test123";
$adminPasswordHash = password_hash($adminPassword, PASSWORD_BCRYPT);

$adminInputPassword = "test123";
$adminPasswordHashVERIFY = 'y$o4qspRTirOSdyGtwHCxt6ee2i0BNChl3mEPazxVbmb534kw3ACHCm';

if (password_verify($adminInputPassword, $adminPasswordHashVERIFY)) {
    echo "Password is correct!";
} else {
    echo "Password is incorrect!";
}

?>
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板