php中的password_verify和password_hash

Kam*_*esh 1 php passwords

我知道password_verify可用于检查密码对预先存储的哈希的有效性.我也知道password_hash要求我们选择哈希算法,如PASSWORD_ACTUALPASSWORD_BCRYPT.

password_verify($pass, $hash)转换$pass成散列怎么会知道使用哪种算法?

ish*_*egg 5

它可以告诉因为哈希本身具有所需的信息.

每个PHP文档:

请注意,password_hash()返回算法,cost和salt作为返回哈希的一部分.因此,验证哈希所需的所有信息都包含在其中.这允许验证功能验证散列,而无需为盐或算法信息单独存储.

参考

例如,PASSWORD_BCRYPT哈希看起来像这样:

$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
|-----|----------------------|------------------------------|
 A1,A2           B                            C
Run Code Online (Sandbox Code Playgroud)
  • A1:2a表示哈希算法.对于Bcrypt来说2a,它是2b,或者2y
  • A2:10是散列的成本参数.这使得散列可以安全地防止定时攻击,因为您可以增加此数量以增加计算所需的"工作量"
  • B:这是128位盐
  • C:产生的184位散列

有了所有这些参数(现在,只是看一下a1),它已经可以告诉它是什么算法.