BCrypt 哈希比对工具|免费快速验证密码与哈希是否匹配

输入密码与 BCrypt 哈希值,几秒内即可免费验证是否匹配。运行方式与 PHP 的 password_verify() 相同,适合调试登录问题,自动支持 $2a$ 与 $2b$ 格式。

哈希值
文本

匹配

不匹配

BCrypt 比对是什么

这是用来验证所输入的明文密码,与既有的 BCrypt 杂凑值是否由相同的原始字符串所产生的工具。由于运作机制与 PHP 的 password_verify() 函式相同,可用于登入处理的实作确认与除错。

BCrypt 杂凑值内含盐值,因此即使由相同密码产生,每次也会是不同的字符串。单纯的字符串比较无法进行比对,必须以专用演算法取出盐值後再行比较,而本工具便代为执行此项处理。

BCrypt 比对的使用方法

  1. 输入字符串 在输入栏输入想比对的明文密码。
  2. 输入杂凑值 贴上以 $2a$ 或 $2b$ 开头的 BCrypt 杂凑值。
  3. 按下验证按钮 一致或不一致的结果会即时显示。

用好本工具的小技巧

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

BCrypt 比对的实用场景

登入处理的除错

可不经应用程序的代码,直接确认资料库中保存的杂凑值是否与预期的密码一致。

密码重设後的行为确认

可测试以新密码产生的杂凑值,是否与预期的明文一致。

迁移时的杂凑值验证

可事先确认自其他系统迁移而来的 BCrypt 杂凑值能否正确运作。

与 BCrypt 相关的术语

盐值(salt)
产生杂凑值时附加的随机字符串。支撑着即使是相同密码每次也会产生不同杂凑值的机制。
password_verify()
PHP 的标准函式,用于安全地比较明文密码与杂凑值。内部会自动处理盐值的取出。
计时攻击
由处理时间的细微差异推测机密信息的攻击手法。使用进行常数时间比较的专用函式即可防范。
$2a$ / $2b$
表示 BCrypt 杂凑值版本的前缀。$2b$ 是修正了旧实作缺陷的版本,为目前所建议使用。

常见问题

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

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

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

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

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

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

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