Using password_hash and password_verify


Using password_hash and password_verify

在我的登录PHP文件中,我有这些

$passwordInput = password_hash($passInput, PASSWORD_BCRYPT);
$passwordVerify = password_verify($userInput, $passwordInput);

在我的注册PHP文件中,我有这个。

$passwordSign = password_hash($passSign, PASSWORD_BCRYPT);

现在,基本上我做到了,这样它就可以散列密码并在注册时将自己插入数据库。它确实如此。

但是,它无法验证它。两个结果都给出了 2 个不同的哈希值,我不知道我可能做错了什么。我也尝试让它再次对输入进行哈希处理并检查数据库中的password_hash,但这不起作用。

使用这些的正确方法是什么?

(另外,$passSign和$userInput是输入字段,它确实会获得用户名/密码)

在注册时,您可以从用户输入中获取密码,并使用password_hash()生成其具有:

$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);

您可以在第三个参数中为其提供要使用的自定义盐,但文档建议不要这样做:

注意 强烈建议您不要为此函数生成自己的盐。如果您不指定安全盐,它将自动为您创建安全盐。

将此哈希保存在数据库中。确保将其放在 60 个字符或更长的 CHAR/VARCHAR 字段中。

当用户想要登录时,请检查他们输入的密码与之前使用password_verify()保存的哈希值:

$auth = password_verify($_POST['password'], $hash);

当然,您可以从数据库中获得正确的$hash值,按提供的用户名进行搜索。

如果$auth TRUE则提供的密码与注册时计算的哈希值匹配,并且对用户进行身份验证。