当前位置: 首页 > 面试题库 >

使用password_hash和password_verify

章鸿光
2023-03-14
问题内容

在我的登录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则提供的密码与在注册时计算出的哈希值匹配,并且对用户进行身份验证。



 类似资料:
  • 问题内容: 假设我想为用户存储密码,这是使用PHP 5.5的功能(或针对PHP 5.3.7+的该版本:https : //github.com/ircmaxell/password_compat)的正确方法吗? 然后我会做: 插入数据库。 然后进行验证: 问题答案: 现在忽略数据库语句的问题,我将回答有关的问题。 简而言之,不,这不是您的方式。您不想单独存储盐,应该同时存储哈希和盐,然后使用两者来

  • 问题内容: 我的注册脚本接受用户的密码,然后使用PHP的password_hash函数对密码进行加密,然后将其放入数据库中。当我使用刚刚创建的用户登录时,出现了检查密码是否相同的错误。就我而言,不是。在登录脚本中调用password_verify函数时,我在做什么错? 寄存器 登录 这是我执行var_dump时得到的: 很明显,密码没有匹配在一起。因此,在注册脚本上,密码被散列并发送到数据库。然后

  • 问题内容: 最近,我一直在尝试在互联网上偶然发现的登录脚本上实现自己的安全性。在尝试学习如何制作自己的脚本以为每个用户生成盐的努力之后,我偶然发现了。 据我了解(基于本页的阅读内容),当您使用时,盐已经在行中生成。这是真的? 我的另一个问题是,吃2种盐不是很聪明吗?一个直接在文件中,另一个在数据库中?这样,如果有人破坏了数据库中的盐,您仍然直接在文件中保留了盐吗?我在这里读到,存储盐从来都不是一个

  • 一旦密码保存到数据库中,在登录过程中不匹配。下面是我的实际功能。 在每次为密码创建散列字符串的函数调用中,该函数下次返回不同的字符串。

  • 我正在建立一个有用户的网站,和大多数包含一些用户类型系统的网站一样,他们用他们的电子邮件和密码登录。我使用PHP为我的网站的后端部分。 在阅读了互联网上的一些文章和帖子后,我了解了PHP函数password_hash()和password_verify(),并想知道像这样的示例过程是否足够安全? 注册用户,password_hash他们的密码,并将散列存储在数据库中。 登录时,使用password

  • 我一直在研究加密密码的最佳方法,我决定继续使用BCRYPT,只是因为每次加密的成本和它通常被认为是目前最好的加密方法之一。 我使用的是双向盐,所以每个用户都有一个独特的盐,然后显然盐存储在我的应用程序中,我注意到一些相当奇怪的行为…根据PHP文档,这种行为是正常的吗? 不管怎样,下面是我使用的代码: 现在,Crypto类: 所以,我感兴趣的是,为什么这个函数只是在输出字符串的开头添加选项中的sal