bcrypt 生成器
bcrypt 仍然是存储密码的安全选择之一。它有意保持较慢,会生成自己的 salt,并通过可调 cost 参数随着硬件进步而扩展成本。这个生成器会从 plaintext password 生成符合标准的 bcrypt hash,方便你 seed 测试用户、在系统之间迁移账户,或与 users.password 字段中已有的 hash 值比对。
如何用 bcrypt 哈希密码
-
1
输入 plaintext password
最多 72 bytes:bcrypt 会静默截断超出的部分。
-
2
选择 cost factor
此工具默认值为 12;10 是更快的旧式选择;13 是本工具的最强设置。每增加 1,哈希时间大约翻倍。
-
3
生成随机 salt
从 cryptographic RNG 中取 16 bytes salt,并嵌入最终 hash 字符串。
-
4
复制 hash
输出是类似 `$2b$12$...` 的 self-describing 字符串,包含 version、cost、salt 和 digest。
bcrypt hash 的结构
$2b$12$mE2n5YqWjKqT9tXg.OQPoeeHZJ9hdSvOt5wFdRRQwl6yE1vWWY3z6
| | | |
| | salt (22 Base64 chars) digest (31 Base64 chars)
| cost (2 digits, 4-31)
version (2a, 2b, 2y,all bcrypt)
整个字符串为 60 个字符。类型为 VARCHAR(60) 或 CHAR(60) 的字段是标准 schema。
Cost factor 建议
| 成本因子 | 每次哈希约耗时(2024 年 CPU) | 应用场景 |
|---|---|---|
| 10 | ~80 ms | 旧版默认值,仍可接受 |
| 12 | ~300 ms | 当前推荐的基准 |
| 13 | ~600 ms | 更高安全性的应用 |
| 14 | ~1.2 s | 超出本工具的范围(最高 13) |
每增加 1,work factor 翻倍。如果登录延迟必须低于 500 ms,建议保持在 10-12。
Version byte:2a vs 2b vs 2y
$2a$,1999 年原始规范。多数库会输出2ahashes。$2b$,2014 年修订版,修复 crypt_blowfish 中的截断 bug。新 hash 首选。$2y$,PHP-specific tag,功能上等同于$2b$。
三者可以互相验证;区别只在 hash 字符串中的 tag。
bcrypt 能防什么
- Rainbow tables,每个 hash 唯一的 salt 会击败预计算查找。
- GPU/ASIC cracking,Blowfish key schedule 受内存限制,对 GPU 不友好。它不如 Argon2 那样针对 GPU 强硬,但暴力破解仍然很慢。
- Database leaks,不通过暴力破解,无法从 hash 恢复 plaintext。
bcrypt 不能防的内容:弱密码(使用最小长度,并检查泄露密码列表)、credential stuffing(使用第二因素)、phishing。
72-byte 限制
bcrypt 只使用密码的前 72 bytes。更长输入会被静默截断,这也是许多库现在建议先用 SHA-256 预哈希密码,再送入 bcrypt 的原因。现代替代方案(Argon2、scrypt)没有这个限制。
常见问题
用于密码存储仍然安全,前提是 cost ≥ 12。OWASP 仍将它列为可接受算法。Argon2id 是新系统的首选,但迁移 legacy bcrypt hashes 通常不是高优先级事项。
因为每个 hash 都会随机生成 salt。验证时会从存储的 hash 中取出 salt,用它重新哈希提交的密码再比较。
多数库不会暴露这个能力,而且理由充分,可预测的 salts 会破坏它的意义。使用库生成的 salt 才是安全路径。
每增加 1,哈希时间大约翻倍,因此 cost 13 大约比 cost 10 慢 8 倍。除非你的应用确实需要额外强度,否则建议保持在 10-12 范围。
相关工具
Base64 文件编码器
将任意文件(PDF、ZIP、图片、可执行文件)编码为 Base64 文本,用于嵌入 JSON、邮件、YAML 或 data URI。在浏览器本地运行,无需上传。
Base58 编码器和解码器
编码 UTF-8 文本或十六进制字节,并使用 Bitcoin、Ripple 或 Flickr 字母表安全解码 Base58。
bcrypt 哈希生成器
生成 bcrypt 哈希,或用明文密码对照已有的 bcrypt 哈希进行验证。一个工具内并排支持生成和验证。
A1Z26 密码编码器
使用 A1Z26 密码(A=1, B=2, ... Z=26)编码文本,或把数字序列解码回字母,并可自定义分隔符。
SSL 证书生成器
完全在浏览器中生成自签名 SSL/TLS 证书和 RSA 私钥。自定义 Common Name、SAN 和有效期,导出为 PEM。
Base32 编码器和解码器
使用 RFC 4648 字母表编码和解码 Base32 字符串。适用于 TOTP 密钥、大小写不敏感的令牌和人工输入的标识符。
此工具还提供其他语言版本
- bcrypt Oluşturucu [TR]
- Generador bcrypt [ES]
- مولد bcrypt [AR]
- Générateur bcrypt [FR]
- bcrypt-generator [NL]
- bcrypt 생성기 [KO]
- Generator bcrypt [ID]
- bcrypt Generator [EN]
- Trình tạo bcrypt [VI]
- bcryptジェネレーター [JA]
- ตัวสร้าง bcrypt [TH]
- Gerador de bcrypt [PT]
- bcrypt-Generator [DE]
- bcrypt-generator [SV]
- Generator bcrypt [PL]
- Generatore bcrypt [IT]
- Генератор bcrypt [RU]