使用password_hash和password_verify

Cam*_*yft 6 php

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

$passwordInput = password_hash($passInput, PASSWORD_BCRYPT);
$passwordVerify = password_verify($userInput, $passwordInput);
Run Code Online (Sandbox Code Playgroud)

在我的Register PHP文件中,我有这个.

$passwordSign = password_hash($passSign, PASSWORD_BCRYPT);
Run Code Online (Sandbox Code Playgroud)

现在,基本上我是这样做的,它哈希密码并在注册时将自己插入数据库.它做了什么.

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

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

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

axi*_*iac 12

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

$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);
Run Code Online (Sandbox Code Playgroud)

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

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

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

当用户想要登录时,使用以下方法检查他们输入的密码,该密码是先前保存的哈希password_verify():

$auth = password_verify($_POST['password'], $hash);
Run Code Online (Sandbox Code Playgroud)

当然,您$hash从数据库中获取正确的值,通过提供的用户名进行搜索.

如果$auth是,TRUE则提供的密码与其在注册上计算的哈希匹配,并且用户被认证.

  • 文档建议将哈希值存储在 255 长度的 varchar 字段中,因为该算法可能会在未来的 PHP 版本中更改,恕不另行通知。 (2认同)