Bcrypt 哈希生成器和校验器
生成带有可配置成本因子(4-15轮)的 Bcrypt 密码哈希,并验证明文密码是否与现有的 Bcrypt 哈希匹配。包含视觉化的哈希结构分析、实时安全计、成本与速度估算器,以及并排的变体说明($2a$、$2b$、$2y$)。
检测到广告拦截,导致我们无法展示广告
MiniWebtool 依靠广告收入免费提供服务。如果这个工具帮到了你,欢迎开通 Premium(无广告 + 更快),或将 MiniWebtool.com 加入白名单后刷新页面。
- 或升级 Premium(无广告)
- 允许 MiniWebtool.com 显示广告,然后刷新
Bcrypt 哈希生成器和校验器
欢迎使用 Bcrypt 哈希生成器和校验器 —— 这是一个免费的在线工具,可以让你生成具有可配置成本因子的加密安全 bcrypt 密码哈希,并校验明文密码是否与现有的 bcrypt 哈希匹配。无论你是在为数据库填充数据、调试登录流程、在系统间迁移用户,还是在学习自适应密码哈希,该工具都能为你提供即时结果,并对 bcrypt 60 字符哈希格式的结构进行直观的教学式解析。
什么是 Bcrypt?为什么要使用它?
Bcrypt 是一种基于 Blowfish 密码的自适应密码哈希函数,由 Niels Provos 和 David Mazières 于 1999 年设计。与 SHA-256 或 MD5 等快速加密哈希不同,bcrypt 被故意设计得很慢,并包含一个可随硬件提升而增加的可调成本因子。每个 bcrypt 哈希还包含一个唯一的随机盐,这可以防止攻击者使用预先计算好的彩虹表。OWASP 建议将 bcrypt 作为现代 Web 应用程序中存储用户凭据的四种可接受密码哈希算法之一。
成本因子:Bcrypt 安全性的核心
成本因子(也称为工作因子或轮次)控制哈希的计算成本。它是对数级的:每增加 1,工作量就会翻倍。在典型的现代 CPU 上,成本 12 大约需要 250 毫秒;成本 14 大约需要 1 秒。下表显示了每个成本级别的估计计算时间 —— 请选择一个对于登录流程足够快,但对于攻击者又足够慢的值。
| 成本 | 轮次 | 估算时间 | 强度 | 推荐用途 |
|---|---|---|---|---|
| 4 | 2^4 |
< 1 毫秒 | 仅用于测试 —— 严禁用于生产 | |
| 5 | 2^5 |
2 毫秒 | 仅用于测试 —— 严禁用于生产 | |
| 6 | 2^6 |
4 毫秒 | 仅用于测试 —— 严禁用于生产 | |
| 7 | 2^7 |
8 毫秒 | 仅用于测试 —— 严禁用于生产 | |
| 8 | 2^8 |
16 毫秒 | 旧系统 | |
| 9 | 2^9 |
31 毫秒 | 旧系统 | |
| 10 | 2^10 |
62 毫秒 | 生产环境最低限度 | |
| 11 | 2^11 |
125 毫秒 | 生产环境最低限度 | |
| 12 | 2^12 |
250 毫秒 | 推荐默认值 | |
| 13 | 2^13 |
500 毫秒 | 高安全性应用 | |
| 14 | 2^14 |
1.00 秒 | 最高强度 | |
| 15 | 2^15 |
2.00 秒 | 最高强度 |
Bcrypt 哈希结构解析
每个 bcrypt 哈希长度正好是 60 个字符,并遵循固定结构。了解每个部分可以更轻松地调试登录问题或在系统之间迁移哈希:
$2b$ → 算法变体$12$ → 成本因子 (2^12 = 4096 轮次)7i..qTPY7p4ZLvKIepRKwe → 22 字符 base64 盐lX0JB55DviohJT.JYruzy4EN6cl.q8O → 31 字符哈希摘要
盐和摘要编码
Bcrypt 使用一种自定义的 base64 字母表,与标准 base64 类似,但使用 ./ 代替 +/ 且不使用填充。这纯粹是历史原因,不影响安全性。盐是 16 个随机字节,编码为 22 个 base64 字符;摘要是 23 个字节,编码为 31 个字符。
Bcrypt 变体详解
在实际应用中,你会遇到几种 bcrypt 前缀。虽然生成的哈希结构相同,但它们的来源不同:
如何使用此工具
- 选择模式:选择生成哈希来创建新的 bcrypt 哈希,或者选择校验哈希来检查密码是否与现有哈希匹配。
- 输入密码:在输入框中输入明文密码。如果密码接近 bcrypt 的 72 字节限制,字节计数器会提醒你。
- 设置成本因子:在生成模式下,拖动滑块选择 4 到 15 之间的成本因子。估计的计算时间和安全评级将实时更新。
- 粘贴要校验的哈希:在校验模式下,粘贴以
$2a$、$2b$、$2x$或$2y$开头的现有 60 字符 bcrypt 哈希。 - 执行并查看结果:点击操作按钮。生成模式下会返回带有颜色标记结构解析的哈希;校验模式下会显示巨大的“匹配”或“不匹配”指示器,并显示原始成本因子。
72 字节密码限制
Bcrypt 建立在 Blowfish 密钥设置阶段之上,该阶段仅消耗密码的前 72 个字节。超过 72 字节的密码会被旧库静默截断,或者被新库直接拒绝。请注意,限制的是字节而非字符 —— 单个表情符号是 4 个字节,大多数非 ASCII 字符在 UTF-8 中占用 2-4 个字节。如果你的应用程序接受任意长度的密码,标准的缓解措施是在传给 bcrypt 之前先用 SHA-256 对密码进行哈希处理并对摘要进行 base64 编码;这将产生固定的 44 字节输入,可以轻松容纳在限制范围内。
何时选择 Bcrypt vs. Argon2 vs. Scrypt
OWASP 和 IETF (RFC 9106) 的现代密码哈希建议列出了四种可接受的算法:Argon2id(新应用首选)、bcrypt、scrypt 和 PBKDF2。在以下情况选择 bcrypt:
- 你需要广泛的兼容性 —— 几乎所有主流语言都有成熟的 bcrypt 库
- 你正在处理已使用 bcrypt 的现有系统
- 你想要一种经过 25 年以上密码分析考验的成熟算法
- 内存密集型哈希(Argon2id、scrypt)在你的环境中不切实际
如果你正在构建一个没有兼容性限制的新系统,请选择 Argon2id —— 它是密码哈希竞赛(Password Hashing Competition)的现代获胜者,提供了 bcrypt 无法企及的抵御 GPU 和 FPGA 攻击的能力。
实际应用场景
对于开发者
- 为开发数据库生成真实的测试用户,无需运行完整的注册流程
- 为集成测试生成固定数据,以便测试登录路径
- 通过根据用户报告的密码验证生产哈希来调试失败的登录
- 在下次登录时通过重新哈希将旧的
$2a$哈希迁移到$2b$ - 通过测量实际计算时间来为生产环境调整成本因子
对于安全工程师
- 验证第三方身份验证服务是否按其声称的成本因子生成哈希
- 通过检查生产样本中的哈希变体和成本来审计密码存储安全性
- 编写培训材料,展示 bcrypt 的结构如何使其免受彩虹表攻击
对于学习者
- 对同一密码生成两次哈希,观察盐如何产生不同的结果
- 尝试不同的成本因子,亲身感受工作量翻倍的效果
- 校验已知哈希,了解 bcrypt 如何在哈希候选密码之前提取成本和盐
常见问题解答
我应该使用多大的 bcrypt 成本因子?
OWASP 目前建议成本因子至少为 10,12 是一个很好的现代默认值,在典型服务器上耗时约 250 毫秒。成本是按对数计算的,因此每增加 1,工作量就会翻倍。成本 14 适用于高安全性的应用程序,而成本 15 是交互式登录的实际最大值。在生产环境中切勿使用低于 10 的成本。
$2a$、$2b$、$2x$ 和 $2y$ 之间有什么区别?
这四种都是以其前缀区分的 bcrypt 变体。$2a$ 是原始修订版本;$2x$ 和 $2y$ 是针对 2011 年发现的 PHP 符号扩展漏洞的紧急修复;$2b$ 是修复了长密码绕回漏洞的现代参考实现。使用任何变体生成的哈希仍然可以进行校验。现代库默认生成 $2b$,你应该在新的哈希中首选它。
我输入的密码会被发送到服务器吗?
表单通过 HTTPS 在服务器端处理以执行 bcrypt 计算,但密码和生成的哈希都不会被记录或存储 —— 每个请求在处理后都会被丢弃。如果对测试密码极度多疑,请切勿将真实的生产密码粘贴到任何在线工具中。请使用作废的测试密码或在本地开发环境中使用此工具。
为什么 bcrypt 有 72 字节的密码限制?
Bcrypt 算法建立在 Blowfish 密钥设置阶段之上,该阶段仅消耗输入的前 72 个字节。超过 72 字节的密码会被旧库静默截断或被新库拒绝。为了支持任意长度的密码,可以在传给 bcrypt 之前先使用 SHA-256 进行哈希并对摘要进行 base64 编码。当你的密码超过限制时,此工具会发出警告。
我可以校验由另一个 bcrypt 库生成的哈希吗?
可以。所有 bcrypt 实现都遵循相同的传输格式($变体$成本$盐+摘要,共 60 个字符)并生成互操作哈希。只要能识别变体前缀,由 Node.js bcrypt、PHP password_hash、Python passlib、Spring Security 或任何合规库生成的哈希都可以在此处正确校验。
为什么对同一个密码生成两次哈希结果不同?
Bcrypt 为每个哈希自动生成一个新的随机 16 字节盐。盐混入算法中并嵌入在输出中,因此同一个密码的两个哈希几乎永远不会相同。校验之所以可行,是因为 checkpw 从存储的哈希中提取成本和盐,并使用这些确切参数重新运行 bcrypt,然后比对摘要。
我可以从 bcrypt 哈希中找回原始密码吗?
不能。Bcrypt 是一种单向函数 —— 没有解密操作。从哈希中找回原始密码的唯一方法是猜测密码,并使用相同的成本和盐通过 bcrypt 运行它们,直到摘要匹配,这正是攻击者在暴力破解攻击中所做的。Bcrypt 自适应成本的全部意义就在于让这些猜测的代价极其昂贵。
它在移动设备上能用吗?
可以。界面完全采用响应式设计,适用于智能手机、平板电脑和台式机。模式切换、成本滑块和结果面板都能适应窄屏幕。
其他资源
引用此内容、页面或工具为:
"Bcrypt 哈希生成器和校验器" 于 https://MiniWebtool.com/zh-cn//,来自 MiniWebtool,https://MiniWebtool.com/
由 miniwebtool 团队编写。更新日期:2026年4月26日