当前位置: 首页 > 知识库问答 >
问题:

使用密码\u散列和密码\u验证[重复]

康鹏云
2023-03-14

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

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

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

$passwordSign = password_hash($passSign, PASSWORD_BCRYPT);

现在,基本上我使它哈希密码,并插入自己的数据库注册。确实如此。

然而,它无法核实。这两个结果给出了两个不同的哈希,我不知道我可能做错了什么。我也试着让它再次散列输入并检查数据库中的password_hash,但那不起作用...

正确的使用方法是什么?

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

共有1个答案

公羊宗清
2023-03-14

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

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

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

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

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

当用户想要登录时,您可以根据之前使用password_verify()保存的散列检查他们输入的密码:

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

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

如果$authTRUE,则提供的密码与注册时计算的哈希值相匹配,并验证用户

 类似资料:
  • 我正在使用以下代码创建哈希密码和salt: 我正在数据库中存储HashedPassword和Salt。 现在我要验证用户登录时的密码: 这不起作用,我得到了一个完全不同的哈希密码,而不是存储在数据库中的密码。据我所知,您应该在用户登录时输入的密码之前预置salt,然后运行相同的哈希密码函数。上面不是等价于那个吗?

  • 密码\u默认值和密码\u BCRYPT之间有什么区别?他们都使用河豚加密算法吗?算法的成本是多少?如何在PHP中设置密码\u散列生成255个散列长度而不是60个?

  • 我模拟存储密码散列,并在登录过程中验证它。 我有一个名为的方法来获取字符串密码,并通过添加盐返回它的哈希值。 我选择一个静态值,在本例中,我选择一个相同的密码值() 但结果是: 为什么这两个值不相同? 我的代码有什么问题?

  • 我用哈希法通过了一个密码 这将密码作为哈希值存储到数据库中。但是当我试图通过 无论密码是否正确,它都会告诉我密码是正确的。有没有办法解决这个问题,所以我可以散列密码,但登录时输入(非散列)密码。

  • 经过一些故障排除,我确定当我使用PHP的password_hash函数散列密码时,加密标识符是$2y$。但是,当我使用password_verify函数将存储的散列密码与用户输入密码进行比较时,password_verify不会返回true。如果我使用https://www.bcrypt-generator.com/上的$2a$标识符生成一个新密码,并用它替换存储的散列密码,它将返回true。 我

  • 我一直在阅读OWASP10,我遇到了存储信息的最佳实践。咸杂碎。在这里,您为每个密码生成一个随机的salt,并对其进行梳理、散列和存储。我的疑问是,如果salt是随机生成的,当用户键入密码时,如何对密码进行身份验证?salt是否与用户名一起保存?如果是这样,这种做法仍然是脆弱的。或者他们是怎么做到的?