密码更改代码错误

Password changing code error

我正在使用 password_hash 功能,它在注册表单和登录表单中运行良好,但在更改密码表单时不起作用,它给我错误消息不正确的旧密码可能是我的代码出错了或者可能是因为 password_hash 即使使用相同的输入每次都会生成不同的字符集,如果是这样,使用什么方法更新密码。相同的代码使用 md5.

if(isset($_POST['senddata'])){
    $old_password = $_POST['oldpassword'];
    $new_password = $_POST['newpassword'];
    $repeat_password = $_POST['newpassword2'];    

    $query = $db->prepare("SELECT * FROM users WHERE username=:username");
    $query->execute(array(':username'=>$username));
    $row = $query->fetch(PDO::FETCH_ASSOC);
    $db_password=$row['password'];
    // hash old password before match
    $old_password = password_hash($old_password, PASSWORD_DEFAULT);
    // check if old password equals db_password
    if ($old_password==$db_password) {
        // continue changing users password
        if ($new_password==$repeat_password) {
            // hash the new password
            $new_password=password_hash($new_password, PASSWORD_DEFAULT);
            $repeat_password=password_hash($repeat_password, PASSWORD_DEFAULT);
            // update password
            $password_update_query=$db->prepare("UPDATE userss SET password=:password, password2=:password2 WHERE username=:username");
            $password_update_query->execute(array(':password'=>$new_password,':password2'=>$repeat_password2,':username'=>$username));
            echo "Your Password Updated";
        }
    } else {
        echo "Old password is incorrect";
    }
}

您需要使用 password_verify($password, $hash); 来验证密码是否相等

当您再次对它进行哈希处理时,您会得到另一个结果,因为它会生成一个新的盐,然后会产生另一个哈希值。

类似于:

$old_password = $_POST['oldpassword'];
$db_password = $row['password']; // which should be already hashed
if (password_verify($old_password, $db_password) {