password_hash 似乎返回一个随机变量 [重复]
Posted
技术标签:
【中文标题】password_hash 似乎返回一个随机变量 [重复]【英文标题】:password_hash seems to return a random variable [duplicate] 【发布时间】:2018-05-30 18:59:42 【问题描述】:我试图在将密码存储到用户数据库之前对其进行哈希处理,因此我运行了代码:
$hashedPass = password_hash($pass, PASSWORD_DEFAULT);
这段代码给了我一个值,比如 $2y$10$wAJr0Z1spRtOcK4cLhIkguUCKgwZKYrwm.nRhm6AtCfDH8ri7ylJu 存储在数据库中。 现在,当我尝试登录时,作为密码输入的相同字符串给出了完全不同的 $hashedPass:比如 $2y$10$cayCQDSQ6pCICSozuIgBNu9uIopIoT5R6Y7aHXG6wx4v/oKx.Ipse
这只是随机的吗?有什么我应该改用的吗?
【问题讨论】:
password_verify
.
仅出于完整性考虑,链接到passoword_verify:php.net/manual/en/function.password-verify.php
结果和使用方法在函数手册的返回值中有说明:php.net/manual/en/…
【参考方案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 上的示例中,只有一个密码被散列
哦等等。 . .我只是发现如果没有保存密码,就没有理由对密码进行哈希处理。对不起以上是关于password_hash 似乎返回一个随机变量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
password_hash 给出错误:严格标准:只有变量应该通过引用传递[重复]