繁体   English   中英

使用password_hash()比较注册时的密码

[英]compare passwords on register using password_hash()

我正在使用password_hash函数在登录页面上保护用户的密码。 但是,在注册页面上,我要求用户两次输入密码,但是我不能比较两个哈希值,因为即使密码相同,它们也不同。

我应该将两个密码都比较为字符串,然后对密码进行哈希处理吗? 或最佳做法是什么?

password_hash用于对password_hash进行哈希处理,并在必要时生成新的盐(您可以传递自己的盐,但这不是必需的),而password_verify函数用于对其进行比较(此函数使用在哈希值中存储的盐)为了进行适当的比较)。

创建密码时,用户会以纯文本形式提供两次密码,因此您只需检查$password1 == $password2

如果您希望验证从数据库获得的密码,则需要执行以下操作:

$password_hash = <some database query>
if (password_verify($password, $password_hash)) {
    login_success();
} else {
    login_failure();
}

您可以以相同的方式比较注册页面中的密码,但没有必要。

您不必哈希密码。 它们只是字符串,可以这样比较:

if ($_POST['password'] !== $_POST['password_verify']) {
    die('Passwords are not the same...');
}

您还可以对真实密码进行哈希处理,然后使用password_verify函数确保password_verify相同。 我不知道您为什么要这样做,但是可能有充分的理由:

$hash   = password_hash($_POST['password'], PASSWORD_DEFAULT);
$verify = $_POST['password_verify'];
if ( ! password_verify($verify, $hash)) {
    die('Passwords are not the same...');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM