如何使用OO检查两个哈希是否相等

安妮·瑞布(Anne Rebb)

我想检查一下两个哈希是否相同,然后在数据库中添加相同的哈希,也就是说,如果密码与确认密码相同,那么用户可以注册
我尝试使用的比较运算符==password_verify方法,但是如果密码哈希相同,则它们都不返回true

如何验证两个密码哈希值相同,然后将它们添加到数据库中?

<?php


class SignUp {

    private $email;
    private $password;
    private $password2;


    public function setEmail($e) {
        $this->email = $e;
    }

    public function getEmail() {
        return $this->email;
    }

    public function setPassword($p) {
        $this->password = password_hash($p, PASSWORD_BCRYPT);
    }

    public function getPasswordHash() {
        return $this->password;
    }

    public function setPassword2($p2) {
        $this->password2 = password_hash($p2, PASSWORD_BCRYPT);
    }

    public function getPasswordHash2() {
        return $this->password2;
    }

    public function CheckHashes() {
        if($this->getPasswordHash() == $this->getPasswordHash2()) {
            echo 'This is true'; //Insert into the database
        }
        else {
            echo 'This is false';
        }
        echo "\n";
        if(password_verify($this->getPasswordHash(), $this->getPasswordHash2())) {
            echo 'True'; //Insert into the database
        }
        else {
            echo 'False';
        }
    }
}

$obj = new SignUp();
$obj->setEmail('email');
$obj->setPassword('string');
$obj->setPassword2('string');
echo $obj->CheckHashes();
阿尔瓦罗·冈萨雷斯(Alvaro Gonzalez)

每次password_hash()使用相同的普通密码进行调用时获得完全不同的结果是完全有意的,也是非常重要的安全措施。这是对预先计算的哈希攻击(彩虹表)的防御,还可以减轻数据泄漏。

验证用户是否正确键入了密码不需要任何加密工具。好的===普通密码操作者应足以满足大多数使用需求。

public function setPassword($password, $confirm) {
    if ($password === $confirm) {
        $this->password = password_hash($password, PASSWORD_BCRYPT);
    } else {
        // Handle input error here
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章