当比较密码哈希与password_hash()和password_verify()时,哪个密码应该先出现?

Patricia Arquette
发布: 2024-10-21 07:05:30
原创
271 人浏览过

When Comparing Password Hashes with password_hash() and password_verify(), Which Password Should Come First?

PHP的password_hash()、password_verify() [重复]

理解密码比较

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

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!