bcrypt 实验场

以 4–16 的成本因子用 bcrypt 对密码哈希,可使用你自己的 22 字符盐,查看哈希被拆分为版本、成本、盐和哈希,并验证哈希。

已使用 0 / 72 字节

2^成本 = 1,024 轮

留空则使用随机盐值。

bcrypt(Provos 与 Mazières,1999)是一种自适应哈希:成本每加 1,计算量翻倍。请选择能让服务器登录耗时保持在约 250 毫秒以内的最高成本(10 或以上)。输出使用 $2b$ 前缀;$2a$ 和 $2y$ 哈希的验证方式相同。

用哈希验证密码

完全在浏览器中运行,您的数据不会被上传。

什么是 bcrypt 实验场?

体验 bcrypt:选择成本因子,输入指定的盐或使用随机盐,并查看得到的哈希被拆分为版本、成本、盐和哈希,以及耗时。验证器可对照 $2a$、$2b$ 和 $2y$ 哈希检查密码。

如何使用 bcrypt 实验场

  1. 输入密码;提示会显示 bcrypt 的 72 个字节中用了多少。
  2. 设置成本因子(4–16),并可选填 22 字符的盐值。
  3. 点击计算哈希,查看编码后的哈希、各部分及耗时。
  4. 把任何 bcrypt 哈希粘贴到验证面板中以测试密码。

示例

输入
Password password, cost 4, salt abcdefghijklmnopqrstuu
输出
$2b$04$abcdefghijklmnopqrstuughE8Ev8uGFaUgY2cNEySvxngrb/Jzdm

与 pyca/bcrypt 在相同密码和盐下的输出一致。

何时使用 bcrypt 实验场

适用于用已知的盐重现 bcrypt 哈希、通过实测耗时选择成本因子,或在调试时验证数据库中的哈希。新设计请优先使用 Argon2id。

bcrypt 实验场 的工作原理

bcrypt(Provos 和 Mazières,1999)把代价高昂的 EksBlowfish 密钥设置运行 2^cost 次,然后对 'OrpheanBeholderScryDoubt' 加密 64 次。16 字节的盐和 23 字节的结果用 bcrypt 自己的 Base64 字母表(./A–Za–z0–9)书写。计算使用 hash-wasm(WebAssembly)。超过 72 个 UTF-8 字节的密码会被拒绝,因为 bcrypt 会忽略第 72 字节之后的所有内容。

常见用例

  • 测量每个成本因子耗时多久
  • 用固定的盐重现测试向量
  • 检查 $2y$ 的 PHP 哈希能否通过验证
  • 讲解 bcrypt 哈希的结构

常见问题

应该使用什么成本因子?

至少 10(OWASP);请选择能让哈希在你的服务器上保持在约 250 毫秒以内的最高值。每加 1,耗时翻倍。

$2a$、$2b$ 和 $2y$ 有什么区别?

它们标记的是对旧实现缺陷的修复。对于不超过 72 字节的密码,它们产生相同的哈希,三者在这里都能通过验证。

为什么我的长密码被拒绝?

bcrypt 只使用前 72 个字节。悄悄截断会导致不同的密码发生碰撞,所以工具选择拒绝。

探索更多分类