修改密码代码错误


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) {