【问题标题】:password_hash seems to return a random variable [duplicate]password_hash 似乎返回一个随机变量 [重复]
【发布时间】:2018-05-30 18:59:42
【问题描述】:

我试图在将密码存储到用户数据库之前对其进行哈希处理,因此我运行了代码:

$hashedPass = password_hash($pass, PASSWORD_DEFAULT);

这段代码给了我一个值,比如 $2y$10$wAJr0Z1spRtOcK4cLhIkguUCKgwZKYrwm.nRhm6AtCfDH8ri7ylJu 存储在数据库中。 现在,当我尝试登录时,作为密码输入的相同字符串给出了完全不同的 $hashedPass:比如 $2y$10$cayCQDSQ6pCICSozuIgBNu9uIopIoT5R6Y7aHXG6wx4v/oKx.Ipse

这只是随机的吗?有什么我应该改用的吗?

【问题讨论】:

标签: php mysql database passwords bcrypt


【解决方案1】:

这是预期的行为。 password_hash 生成盐,与明文密码一起使用以生成散列。 salt 是随机生成的,因此每次调用password_hash 时输出都会有所不同。

使用password_verify 验证密码。

http://php.net/manual/en/function.password-verify.php

password_verify 验证明文密码所需的所有信息都包含在哈希本身中。对于您提供的密码哈希,哈希的结构取决于所使用的算法:

$2y$10$wAJr0Z1spRtOcK4cLhIkguUCKgwZKYrwm.nRhm6AtCfDH8ri7ylJu
  • $2y$ 这个前缀表示这是一个 bcrypt 哈希
  • 10这是成本参数
  • wAJr0Z1spRtOcK4cLhIkgu前22个字符是盐
  • UCKgwZKYrwm.nRhm6AtCfDH8ri7ylJu剩下的31个字符是hash

https://en.wikipedia.org/wiki/Bcrypt

【讨论】:

  • 完整性注意:随机盐加上一些其他数据作为哈希数据的前缀,以便password_verify可以生成相同的哈希进行比较。
  • 我可以使用两个参数作为散列密码运行 password_verify 吗?在 php.net 上的示例中,只有一个密码被散列
  • 哦等等。 . .我只是发现如果没有保存密码,就没有理由对密码进行哈希处理。对不起
猜你喜欢
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多