password_hash 似乎是 return 一个随机变量

password_hash seems to return a random variable

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

$hashedPass = password_hash($pass, PASSWORD_DEFAULT);

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

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

这是预期的行为。 password_hash 生成一个盐,该盐与明文密码一起用于生成哈希。盐是随机生成的,因此每次调用 password_hash.

时输出都会不同

使用password_verify验证密码。

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

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

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

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