在PHP中的密碼雜湊問題 - password_verify()總是回傳false
P粉481035232
2023-07-30 14:51:07
<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>
我找到問題所在了!問題似乎是由於在$adminPasswordHashVERIFY變數中使用雙引號(")引起的。當使用雙引號時,PHP會解釋字串並替換其中的變數。由於沒有名為$fReIQ的變量,PHP將其視為未定義的變量,導致驗證時產生錯誤的哈希值。
要解決這個問題,在$adminPasswordHashVERIFY變量中使用單引號(')引起哈希密碼。這樣可以確保哈希密碼被視為普通字串,而不是由PHP解釋。
現在,如果你嘗試以下程式碼,你將得到輸出"密碼正確! "。
#