🔐 bcrypt 哈希信息

解析和分析 bcrypt 密码哈希。查看版本、成本因子、盐值和哈希摘要等组成部分。

关于 bcrypt 哈希信息工具

这个工具用于解析 bcrypt 密码哈希,将其拆分为组成部分:版本标识、成本因子、盐值和哈希摘要。在上方粘贴哈希并点击分析即可查看其结构。所有操作都在浏览器本地完成——不会上传任何数据。

bcrypt 哈希格式

bcrypt 哈希遵循模块化加密格式(Modular Crypt Format),结构为 $版本$成本$盐值+哈希。各字段说明如下:

  • 版本 —— $2a$$2b$$2y$$2x$2b 是当前标准(OpenBSD);2a 是原始版本;2y 由部分 PHP 实现使用;2x 是存在已知缺陷的遗留变体。
  • 成本因子 —— 04 到 31 之间的两位数字。哈希函数执行 2^成本 次迭代。值为 12 表示 4,096 轮。成本越高 = 哈希越慢 = 抗暴力破解能力越强。
  • 盐值 —— 22 个字符,来自 bcrypt 自定义 base64 字母表(./A-Za-z0-9),编码 128 位随机盐。
  • 哈希摘要 —— 31 个字符,来自同一字母表,编码基于 Blowfish 的密钥派生所产生的 184 位输出。

总长度

一个完整的 bcrypt 哈希长度为 60 字符:$2b$(4)+ 12(2)+ $(1)+ 22 字符盐 + 31 字符摘要 = 60。部分数据库会存储前导 $ 或尾部数据,因此 59 到 60 字符的值都较为常见。

选择成本因子

成本因子直接控制每次验证的耗时。经验法则:将其设为单次哈希在生产硬件上大约需要 250–500 毫秒:

  • 成本 10 —— 约 1,024 轮。较快,但对拥有 GPU 的现代攻击者而言日益薄弱。
  • 成本 12 —— 约 4,096 轮。2024 年许多框架的常见默认值。
  • 成本 14 —— 约 16,384 轮。较强,但在高负载下会带来明显延迟。
  • 成本 31 —— 最大值。生产环境不切实际,仅用于高安全离线场景。

随着硬件性能提升,应定期提高成本。bcrypt 支持在登录时检测更高的期望成本并用新盐重新编码,从而实现成本升级。

为什么选 bcrypt?

bcrypt 是 Niels Provers 和 David Mazières 于 1999 年设计的密码哈希函数。与普通 SHA-256 不同,它故意设计为慢速,并采用可调成本因子,因此即使硬件提速也能保持抗暴力破解能力。内嵌的盐值可防止彩虹表攻击,确保相同密码哈希出不同值。现代密码存储推荐 bcrypt、scrypt 和 Argon2。

常见问题

这个工具能生成 bcrypt 哈希吗? 不能——它仅用于解析和分析已有哈希。生成 bcrypt 需要运行 Blowfish 加密数千次,这需要专用实现而非 Web Crypto API。

能从 bcrypt 哈希还原密码吗? 不能。bcrypt 是单向函数,"破解"它的唯一方法就是逐一尝试候选密码,而这正是成本因子使其变得昂贵的原因。

盐值是机密的吗? 不是。盐值作为哈希的一部分以明文存储是其设计意图。其作用是让每个哈希唯一,而非保密。你可以放心分享 bcrypt 哈希——它在计算上仍然难以攻击。

"预计计算耗时"是什么意思? 这是基于成本因子对单次验证耗时的粗略估算,实际性能因硬件和实现而异。

应该使用哪个变体? 新应用应使用 $2b$ 生成哈希,成本因子至少为 12。避免使用 $2x$,因存在已知符号扩展缺陷。