使用PHP的password_hash()函數對密碼進行哈比希存儲時在資料庫中,有必要了解在登入過程中如何使用password_verify()驗證雜湊密碼。
在您的程式碼中,password_hash()函數在儲存之前對密碼進行雜湊處理它在資料庫中。但是,在登入腳本中,您使用password_verify() 直接將使用者輸入的未雜湊密碼與儲存在資料庫中的雜湊密碼進行比較。這種比較總是會失敗。
使用password_verify()驗證密碼的正確方法是傳遞使用者輸入的未雜湊密碼作為第一個參數和雜湊值密碼作為第二個參數儲存在資料庫中。這將允許password_verify()正確比較兩個密碼。
這是登入腳本的修改版本,其中包含已修正的密碼驗證:
<code class="php">if($_SERVER["REQUEST_METHOD"] == "POST"){ $p_num = $_POST["username"]; $pwd = $_POST["password"]; $query = "SELECT * FROM `$user_table` WHERE `user_id` = '$p_num'"; $result = mysqli_query($connect, $query); while($row = mysqli_fetch_assoc($result)){ $user_id = $row['user_id']; $first_name = $row['first_name']; $last_name = $row['last_name']; $user_name = $first_name ." " .$last_name; $password = $row['password']; $image = $row['image']; $email = $row['email']; $program = $row['program']; $role = $row['role']; $status = $row['logged_in']; $registered = $row['registered']; // Verify the password using password_verify() if(($user_id == $p_num) && (password_verify($pwd, $password))){ $_SESSION["id"] = $user_id; $_SESSION["user"] = $user_name; $_SESSION["program"] = $program; $_SESSION["pass"] = $password; $_SESSION["image"] = $image; $_SESSION["email"] = $email; $_SESSION["role"] = $role; $_SESSION["status"] = $status; $_SESSION["registered"] = $registered; $loggedin = "UPDATE `$user_table` SET `logged_in` = 1 WHERE `user_id` = '$user_id'"; } var_dump($pwd); var_dump($password); } }</code>
正確使用password_verify(),可以在登入時準確驗證使用者密碼,確保系統的安全性和完整性。
以上是當比較密碼雜湊與password_hash()和password_verify()時,哪個密碼應該先出現?的詳細內容。更多資訊請關注PHP中文網其他相關文章!