搜尋

首頁  >  問答  >  主體

在PHP中的密碼雜湊問題 - password_verify()總是回傳false

<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粉481035232P粉481035232513 天前524

全部回覆(1)我來回復

  • P粉099000044

    P粉0990000442023-07-31 13:54:06

    我找到問題所在了!問題似乎是由於在$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!";
    }
    
    ?>

    回覆
    0
  • 取消回覆