越高 = 越慢 + 越安全。成本 12 在普通笔记本上约需 4ms;10-12 是常见的生产范围。
100% 在浏览器中运行 - 密码和哈希永远不会离开你的设备。
I am storing user passwords for a web app with at most 10 000 users. Compare bcrypt (cost 12), scrypt, and Argon2id for this workload: resistance to GPU cracking, memory requirements, DoS risk on the login endpoint, and the parameters you would actually deploy. Give a concrete recommendation and the exact parameter values.
功能说明
Bcrypt 哈希与校验用 bcrypt —— 专为存储密码而设计的算法 —— 对密码进行哈希,并用密码核对已有的 bcrypt 哈希。哈希会派生一个全新的 16 字节随机盐,并运行 EksBlowfish 密钥编排 2^cost 次,因此每次猜测有多昂贵完全由你掌控。校验会用哈希自带的盐和 cost 重新计算摘要,并告诉你是否匹配。它接受 $2a$、$2b$ 和 $2y$ 哈希,因此兼容 Node、Go、Python、PHP、Java、PostgreSQL 的 pgcrypto 以及所有 OpenBSD 系实现产出的哈希。
一切都在你的浏览器中运行,基于一个从零实现的 Blowfish(不依赖外部加密库)。你输入的密码和粘贴的哈希永远不会离开你的设备。
使用方法
- 用顶部的哈希 / 校验切换器选择模式。
- 哈希: 输入密码(眼睛按钮可显示),拖动 cost 因子滑块(4-16,默认 12)- 越高越慢也越安全 - 然后按哈希密码。
$2b$哈希随即出现,附带复制按钮和耗时徽章。 - 校验: 粘贴 bcrypt 哈希并输入待核对的密码。工具实时解码哈希并显示其版本、cost 和盐。按校验密码得到绿色 Match ✓ 或红色 No match ✗ 徽章。
- 两种模式下都可以用 Sample 载入示例输入(校验示例是一对真实匹配的哈希与密码)。
示例
以 cost 12 哈希一个密码
密码:correct horse battery staple → 按哈希密码。输出形如:
$2b$12$9IZSN8TXXnSIx4aI0Cd2DetqQ/3FT9d6KJ9fl96SnULIK5x5q/moq
每次运行都会得到不同的哈希 - 盐每次都全新随机 - 而它们全部能通过同一密码的校验。
校验一个哈希
粘贴 $2a$04$RPx7yiCLNb09VKAUBVNsnOVNzB1Zp/hE1qbDvGUs1aehNX5hE15su,密码 password → Match ✓。徽章把它解码为版本 $2a$、cost 4、盐 RPx7yiCLNb09VKAUBVNsnO。
读懂哈希格式
$2b$12$ + 22 字符的盐 + 31 字符的摘要 = 共 60 字符。12 是 cost:构造该密钥编排共运行了 2¹² = 4 096 轮 EksBlowfish。
补充说明
- 为什么 bcrypt 胜过纯 SHA-256 存密码: SHA-256 快 - 这恰恰是你不想要的。一块现代 GPU 每秒能算数十亿次 SHA-256,却只能算数万次 bcrypt,因为 bcrypt 的 cost 因子强制执行 2^cost 轮串行密钥编排,而它的盐消灭了彩虹表和跨账户复用。出于同样的原因,bcrypt 也彻底胜过 MD5 和 SHA-1 - 两者在碰撞上均已破解,计算也过于廉价。
- cost 是旋钮,不是常量: 选择你的用户和硬件能容忍的最慢 cost - 登录服务器上大约每条哈希 250ms-1s。今天这个值是 cost 10-12;随着硬件提速,每隔几年调高它。校验与哈希付出同样的成本,因此高得离谱的 cost 也会拖慢你自己的登录,还可能成为登录端点上的拒绝服务杠杆。
- 72 字节上限: bcrypt 至多读取密码的前 72 字节,本工具严格遵守这条规则。现代建议是:若必须支持长口令短语,先用 SHA-256 预哈希 - 但要小心操作(先对原始长度做
HMACHMACA construction that combines a hash function with a secret key to prove a message is intact and came from someone holding the key.
,否则会继承 SHA-256 的空字节歧义)。 - 绝不自造比较: 永远像本工具一样用常数时间比较来校验 - 对哈希做字符串相等比较会泄露时序信息。
- 可以自由选择时的替代品: Argon2id(内存困难,Password
HashingHashingA one-way function that maps data of any size to a fixed-length digest. Same input, same digest; any change, different digest; not reversible.
Competition 优胜者)和 scrypt 对 GPU/ASIC 攻击者更强;bcrypt 仍是久经战场、处处可用的基线。 - 相关工具:Password Strength Analyser、Password Generator、HMAC Generator。