繁体   English   中英

password_hash输出的格式是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM