CodeToolProCodeToolPro
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),确保安全性和性能。绝不要仅依赖客户端哈希——始终在服务器端进行。

How to Use Bcrypt Generator

  1. 1Configure your generation settings (length, format, options)
  2. 2Click the Generate button to create new output
  3. 3Review the generated result
  4. 4Copy the output to your clipboard or download it

Frequently Asked Questions

  • Can I use the generated output in production?

    Yes, all generated values are cryptographically random (where applicable) and ready for production use. No special attribution required.

  • Is Bcrypt Generator free?

    Yes, 100% free. No registration, no credit card required. All tools are freely available for developers worldwide.

  • Does this tool upload my data to any server?

    No. All processing runs locally in your browser using client-side JavaScript. Your input data, code, or files never leave your device. We do not store, log, or transmit any user data.