加密与哈希
BCrypt 哈希验证
验证文本与 BCrypt 哈希值是否匹配。
| 哈希值 | |
|---|---|
| 文本 |
匹配
不匹配
Tips
- BCrypt 将盐值内嵌于哈希中,因此即使每次哈希结果不同,只要来自同一原始字符串,也会被判定为匹配。
- 本工具的验证机制与 PHP 的
password_verify($password, $hash)相同。 - 将从数据库获取的哈希值与输入密码进行比对时,请使用专用验证函数而非普通字符串比较(
==),以防止时序攻击。 - 以
$2a$开头的哈希值同样可作为 BCrypt 进行验证。
闲话 ― 认证的幕后:登录时那"零点几秒"的真相
在网络服务中,按下登录按钮到收到结果之间的零点几秒,部分时间正是 BCrypt 在计算密码哈希值。这个延迟是为了安全而"故意"设计的。
时序攻击(Timing Attack)是一种旁信道攻击,通过测量处理时间的细微差异来推断秘密信息。用普通字符串比较(==)验证密码时,比较时间会因字符匹配位置不同而略有差异。BCrypt 的验证函数设计为以恒定时间运行,因此能有效抵御此类攻击。
在实际 Web 应用中,建议即使用户不存在,也以与"用户存在但密码错误"相同的时间返回响应。若攻击者能区分"用户不存在"与"密码错误",就会获得枚举有效用户名的线索。