一尘不染

使用password_hash和password_verify

php

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

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

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

$passwordSign = password_hash($passSign, PASSWORD_BCRYPT);

现在,从本质上讲,我这样做是为了使它散列密码,并在注册时将其自身插入数据库中。这样做。

但是,它无法验证它。两种结果都给出2个不同的哈希值,我不知道自己可能做错了什么。我还尝试只是使其再次哈希输入,然后检查数据库中的password_hash,但这没有用。

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

(同样,$ passSign和$ userInput是输入字段,它确实获取用户名/密码)


阅读 435

收藏
2020-05-26

共1个答案

一尘不染

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

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

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

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

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

当用户想要登录时,请使用先前使用password_verify()以下命令保存的哈希值来输入密码:

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

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

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

2020-05-26