password_hash似乎返回一个随机变量[重复]

问题描述 投票:3回答:1

这个问题在这里已有答案:

我在将密码存储到用户数据库之前尝试哈希密码,因此我运行代码:

$hashedPass = password_hash($pass, PASSWORD_DEFAULT);

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

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

php mysql database passwords bcrypt
1个回答
4
投票

这是预期的行为。 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个字符是哈希

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

© www.soinside.com 2019 - 2024. All rights reserved.