CodeToolProCodeToolProFree Online Developer Tools
GitHub

Bcrypt Generator

技术详情

Bcrypt 哈希生成与验证器的工作原理

工具功能

Bcrypt 工具提供基于 bcrypt 算法的密码哈希生成和验证功能。生成哈希时,工具使用随机盐值和可配置的工作因子(cost factor,范围 4-31)对输入的密码进行加密哈希。验证时,工具将输入的密码与已有的 bcrypt 哈希值进行比对,判断是否匹配。所有处理在浏览器内存中进行,密码不会发送到服务器。


常见开发者使用场景

Bcrypt 是现代 Web 应用中密码存储的标准方案。在用户注册时使用 bcrypt 哈希存储密码,防止数据库泄露时密码被恢复;在用户登录时验证密码与存储哈希的匹配;在系统升级时使用更高的工作因子重新哈希密码;在前后端分离架构中在前端预先哈希密码(需结合 HTTPS)。Bcrypt 的设计目标是"慢哈希"——即使计算速度慢来抵抗暴力破解。

对于需要评估密码强度的场景,可以使用 密码强度检测器 在哈希前检查密码质量。对于其他类型的哈希需求,可以使用 通用哈希生成器 处理 MD5、SHA 等非密码用途的摘要算法。


Bcrypt 算法原理

Bcrypt 基于 Blowfish 分组密码的密钥调度算法,由 Niels Provos 和 David Mazières 于 1999 年设计。核心特性包括:内置盐值(128 位随机盐)防止彩虹表攻击;可配置的工作因子(cost factor),每增加 1 使计算时间翻倍;最大输入长度限制为 72 字节(需注意长密码的截断问题)。

Bcrypt 哈希的输出格式为 $2a$[cost]$[22字符salt][31字符hash],共 60 字符。$2a$ 是版本标识符(还有 $2b$ 修正版),cost 是两位数字的工作因子。哈希的"慢速"特性是设计目标——单次哈希耗时数百毫秒,有效防止 GPU 并行暴力破解。


常见陷阱与注意事项

  • 密码长度截断:Bcrypt 在大多实现中截断 72 字节以上的密码。长密码(特别是多字节 Unicode 字符)可能被意外截断,弱化安全性。
  • null 字节问题:Bcrypt 在 null 字节(\0)处停止处理,如果密码包含 null 字节,后续字符将被忽略。
  • 工作因子选择:过高的工作因子(>14)在浏览器中计算极慢,可能造成页面无响应。生产环境建议 10-12。
  • 不是加密:Bcrypt 是哈希算法不是加密算法,哈希值不可逆向解密。哈希的验证只能通过重新哈希输入并比较结果。
  • 浏览器性能:浏览器中的 WebAssembly 或纯 JavaScript bcrypt 实现比原生实现慢得多,生产环境应在服务器端处理。

何时使用此工具而非代码

在需要快速生成或验证单个 bcrypt 哈希、测试不同工作因子的性能、或演示密码哈希概念时使用此工具。对于生产环境中的密码处理,必须在服务器端使用原生 bcrypt 库(如 Node.js 的 bcryptjs 或更优的 bcrypt C++ 绑定、Python 的 bcrypt、PHP 的 password_hash),确保安全性和性能。绝不要仅依赖客户端哈希——始终在服务器端进行。