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