如何使用OO检查两个散列是否相等

  • 本文关键字:两个 是否 OO 何使用 php
  • 更新时间 :
  • 英文 :


我想检查一下这两个散列是否相同,然后在数据库中添加相同的散列,也就是说,如果密码与确认密码相同,那么用户可以注册
我尝试使用比较运算符==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();

每次使用相同的纯密码调用password_hash()时都会得到完全不同的结果,这是完全有意的,也是一项非常重要的安全措施。它可以防御预先计算的哈希攻击(彩虹表(,还可以减少数据泄露。

验证用户是否正确键入密码不需要任何加密工具。普通密码上好的旧===运算符应该足以满足大多数用途。

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

最新更新