免费转换器

Bcrypt 密码 生成器

在浏览器中即时生成安全的bcrypt密码哈希值。选择成本因子,客户端哈希 — 完全私密且免费。

关于此工具

bcrypt 是由 Niels Provos 和 David Mazières 于 1999 年设计的密码哈希函数,源自 Blowfish 密码。与 SHA-256 等通用哈希函数不同,bcrypt 故意缓慢(并且可以通过成本参数配置缓慢),这正是密码哈希器所需的属性。更快的哈希函数可以让攻击者每秒暴力破解更多候选者;较慢的速度会限制它们。

bcrypt 还自动合并每个密码的盐,消除基于预先计算的彩虹表的一整类攻击。 salt 和 cost 参数作为 bcrypt 输出的一部分存储,因此验证只需要存储的哈希值和候选密码 - 无需单独的 salt 管理。这种缓慢、盐分和独立格式的结合使得 bcrypt 成为二十年来的默认密码哈希,并且成为今天的一个强有力的选择。

现代替代方案是存在的。 Argon2 赢得了 2015 年密码哈希竞赛,除了时间硬度之外,还提供内存硬度。 scrypt 提供类似的属性。对于新设计,推荐选择 Argon2id。 bcrypt 仍然可以接受并广泛部署,特别是在 Argon2 不可用的环境中。

为什么使用 bcrypt 对密码进行哈希处理

将密码存储为明文是一种不当行为。使用像 SHA-256 这样的快速哈希值来存储它们也好不了多少——现代 GPU 每秒计算数十亿次 SHA-256 哈希值,使得对任何常见密码的暴力攻击在数小时内变得可行。 bcrypt 故意缓慢的速度改变了经济性:在成本系数 12 下,攻击者为每个候选密码花费大约 250 毫秒,这使得暴力破解对于任何重要的密码都是不切实际的。

bcrypt 的自动每个密码盐也能抵御彩虹表攻击。具有相同密码的两个用户会产生不同的 bcrypt 哈希值,因为他们的盐不同。破坏密码数据库不会让攻击者快速识别常见密码或预先计算表的命中。

使用方法

输入密码,选择成本,获取哈希值。

  1. 输入密码: 输入要哈希的密码。该工具完全在您的浏览器中运行;密码不会传输到任何地方。
  2. 选择成本因素: 默认值为 10,在现代硬件上产生大约 100 毫秒的哈希时间。建议新应用程序使用 12(250 毫秒)。较高的值可以提高安全性,但代价是验证速度较慢。
  3. 产生: 哈希器生成随机 16 字节盐,运行 bcrypt 密钥派生,并生成标准 $2b$ 格式的哈希值。
  4. 使用哈希: 将完整的输出 ($2b$cost$saltAndHash) 存储在您的密码数据库中。验证使用相同的库将候选者与存储的哈希值进行比较。

常见用例

技术细节

bcrypt 使用修改后的 Blowfish 密码的密钥设置阶段,重复 2^cost 次。成本因素是对数的 — 成本 12 是成本 11 的两倍,是成本 10 的四倍。这种对数缩放使管理员可以随着硬件的改进而逐渐提高成本,而无需重新设计系统。

输出格式为 $version$cost$saltAndHash,其中 saltAndHash 使用自定义字母表进行 Base64 编码。该版本通常是 $2b$ (修复了环绕错误的现代变​​体)或 $2y$ (特定于 PHP 的等效版本)。盐为16字节;哈希值是 24 字节;它们一起编码为 53 个字符的 custom-base64。

最大输入长度为 72 字节(Blowfish 密钥长度限制)。较长的密码会被悄悄截断,这是 bcrypt 的一个长期存在的怪癖。最佳实践是将密码长度限制为 72 个字节,或者使用 SHA-256 进行预哈希,以在 bcrypt 之前标准化长度。

最佳实践

常见问题

我可以自定义生成的输出吗?
是的。该工具提供了各种自定义选项,可以根据您的特定需求定制输出。在生成之前调整设置,或使用不同的选项重新生成。
生成的内容可以免费使用吗?
是的。您使用此工具生成的所有内容都可以用于个人、教育或商业目的,没有任何限制或归属要求。
这个需要账号吗?
不需要。该工具无需注册、无需电子邮件、无需注册即可立即使用。只需打开页面并开始生成。
我的输入数据是否保密?
是的。所有处理都发生在您的浏览器中。您的输入数据和生成的输出永远不会发送到任何外部服务器。
我应该添加自己的盐吗?
不会。bcrypt 自动生成并存储随机盐。添加自己的盐是不必要的,并且可能会导致微妙的错误。使用库的默认盐生成。
密码是否发送到服务器?
不会。bcrypt 哈希发生在您的浏览器中。密码永远不会离开您的设备。
为什么有 $2a$、$2b$、$2y$ 变体?
$2a$ 是原版。 $2b$ 修复了 2014 年发现的环绕错误。$2y$ 是 PHP 特定的,功能上等同于 $2b$。 New systems should produce $2b$ hashes.
我可以将高成本哈希降级为较低成本吗?
不会。哈希值包含成本作为输出的一部分,并且验证需要相同的成本。要更改成本,请在下次成功登录时重新哈希。