![](/img/trans.png)
[英]what is an alternative to password_hash() for (PHP 5 < 5.5.0)?
[英]What is the format of password_hash output?
我知道PHP函数, password_hash
输出算法,cost,salt和hash都在一个字符串中,所以password_verify
可以检查密码。
PHP页面的示例输出:
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
因此$ 2y $代表算法, 10代表成本。 但是password_verify
如何将哈希值与哈希分开? 之后我没有看到任何标识符将两者分开。
对于密码哈希的bCrypt版本。 Bcrypt具有固定长度的盐值。 当您使用带有默认算法的password_hash()/ password_verify()时,PHP内部调用的crypt函数具有16字节的盐。 这是自定义base64字母A-Za-z/.
的22个字符A-Za-z/.
然后它将字符串解码为字节,因为22个B64字符编码为16.5Bytes,有一个额外的半字节数据没有被考虑在内。
对于所有其他哈希,salt值是一组定义的字节,当然可以编码为ASCII安全b64并放在$
符号之后,然后验证函数只需要通过分隔符$
将字符串拆分成部分然后去第三组字符获得substr(0,B64_ENCODED_HASH_ALGORITHM_SALT_LEN)
。 之后,它将传递它从分裂字符串中获得的参数,并将这些参数传递回password_hash
函数以及要检查的密码。
它给你的字符串在大多数情况下由散列算法的标准定义,但几乎总是符合模式
$<ALGORITHM_ID>$<COST_IN_FORMAT>$<BASE64_ENCODED_SALT><BASE64_ENCODED_HASH>$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.