繁体   English   中英

PHP中的password_verify和password_hash

[英]password_verify and password_hash in php

我知道password_verify可用于根据预先存储的哈希值检查密码的有效性。 我也知道password_hash要求我们选择一种哈希算法,例如PASSWORD_ACTUALPASSWORD_BCRYPT

password_verify($pass, $hash)$pass转换为hash时,它将如何知道要使用哪种算法?

它可以说明是因为散列本身具有必需的信息。

每个PHP文档:

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

参考

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

$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
|-----|----------------------|------------------------------|
 A1,A2           B                            C
  • A1: 2a表示哈希算法。 对于Bcrypt,它可以是2a2b2y
  • A2: 10是哈希的成本参数。 这使散列能够安全地抵抗定时攻击,因为您可以增加此数字以增加计算所需的“工作”
  • B:这是128位的盐
  • C:产生的184位哈希

使用所有这些参数(目前,仅查看a1 ),它已经可以判断出它是什么算法。

使用PASSWORD_BCRYPT创建的哈希在开头有一个标识符:$ 2y $,并确保哈希的长度为60个字符。 password_verify()最有可能查看这两者之一或两者,以确定要使用哪种哈希。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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