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
我试图在将密码存储到用户数据库之前对其进行哈希处理,因此我运行代码:
$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