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 实验场
- 输入密码;提示会显示 bcrypt 的 72 个字节中用了多少。
- 设置成本因子(4–16),并可选填 22 字符的盐值。
- 点击计算哈希,查看编码后的哈希、各部分及耗时。
- 把任何 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 个字节。悄悄截断会导致不同的密码发生碰撞,所以工具选择拒绝。