[英]password_verify and password_hash in php
我知道password_verify可用于根据预先存储的哈希值检查密码的有效性。 我也知道password_hash要求我们选择一种哈希算法,例如PASSWORD_ACTUAL
或PASSWORD_BCRYPT
。
当password_verify($pass, $hash)
将$pass
转换为hash时,它将如何知道要使用哪种算法?
它可以说明是因为散列本身具有必需的信息。
每个PHP文档:
请注意,password_hash()返回算法,成本和盐值作为返回的哈希值的一部分。 因此,其中包含验证哈希所需的所有信息。 这允许验证功能验证哈希,而无需单独存储盐或算法信息。
例如, PASSWORD_BCRYPT
哈希看起来像这样:
$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
|-----|----------------------|------------------------------|
A1,A2 B C
2a
表示哈希算法。 对于Bcrypt,它可以是2a
, 2b
或2y
10
是哈希的成本参数。 这使散列能够安全地抵抗定时攻击,因为您可以增加此数字以增加计算所需的“工作” 使用所有这些参数(目前,仅查看a1
),它已经可以判断出它是什么算法。
使用PASSWORD_BCRYPT创建的哈希在开头有一个标识符:$ 2y $,并确保哈希的长度为60个字符。 password_verify()最有可能查看这两者之一或两者,以确定要使用哪种哈希。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.