BCrypt 哈希验证

验证文本与 BCrypt 哈希值是否匹配。


哈希值
文本

匹配

不匹配

Tips

  • BCrypt 将盐值内嵌于哈希中,因此即使每次哈希结果不同,只要来自同一原始字符串,也会被判定为匹配
  • 本工具的验证机制与 PHP 的 password_verify($password, $hash) 相同。
  • 将从数据库获取的哈希值与输入密码进行比对时,请使用专用验证函数而非普通字符串比较(==),以防止时序攻击。
  • $2a$ 开头的哈希值同样可作为 BCrypt 进行验证。

常见问题

BCrypt 将随机盐值嵌入哈希值中。验证时,从哈希值中提取盐值,再用相同的盐对输入进行哈希比较,因此即使哈希值每次不同,也能正确匹配。

两者兼容,本工具均可验证。$2b$ 是修复了旧版实现中某个错误的版本,目前推荐使用 $2b$

不能。BCrypt 是单向哈希函数,从哈希值反推原始密码在计算上是不可行的。本工具仅验证是否匹配,无法还原原始值。
ツールくん

闲话 ― 认证的幕后:登录时那"零点几秒"的真相

在网络服务中,按下登录按钮到收到结果之间的零点几秒,部分时间正是 BCrypt 在计算密码哈希值。这个延迟是为了安全而"故意"设计的。

时序攻击(Timing Attack)是一种旁信道攻击,通过测量处理时间的细微差异来推断秘密信息。用普通字符串比较(==)验证密码时,比较时间会因字符匹配位置不同而略有差异。BCrypt 的验证函数设计为以恒定时间运行,因此能有效抵御此类攻击。

在实际 Web 应用中,建议即使用户不存在,也以与"用户存在但密码错误"相同的时间返回响应。若攻击者能区分"用户不存在"与"密码错误",就会获得枚举有效用户名的线索。