使用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中文网其他相关文章!