Bcrypt Generator
技术详情
Bcrypt 哈希生成与验证器的工作原理
工具功能
Bcrypt 工具提供基于 bcrypt 算法的密码哈希生成和验证功能。生成哈希时,工具使用随机盐值和可配置的工作因子(cost factor,范围 4-31)对输入的密码进行加密哈希。验证时,工具将输入的密码与已有的 bcrypt 哈希值进行比对,判断是否匹配。所有处理在浏览器内存中进行,密码不会发送到服务器。
常见开发者使用场景
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),确保安全性和性能。绝不要仅依赖客户端哈希——始终在服务器端进行。