加密与哈希

BCrypt 哈希验证

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


哈希值
文本

匹配

不匹配

Tips

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

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

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

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

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