BCrypt 哈希
生成 bcrypt 密码哈希(cost 4–15)、校验密码与哈希是否匹配、解析哈希里的版本、成本、盐与摘要,并显示每次计算的耗时。
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
0 毫秒1024 次迭代这个工具能做什么
- 注册用户或重置密码时生成一段 bcrypt 哈希存进数据库,工具会同时告诉你这次计算花了多少毫秒,方便评估服务端开销。
- 校验阶段核对密码与已有哈希是否匹配,确认用户输入的是不是原密码。
- 审计老系统里的哈希:解析出 `$2b$10$…` 里的版本、成本因子、盐与摘要,判断成本因子是不是还停留在 4 或 5。
- 上线前压测前先估一下成本因子:cost 每 +1 计算量翻倍,这里能直观看到耗时变化。
示例
输入
密码 password123,成本因子 cost = 10
输出
$2b$10$Ovw.3EE33b/WaRSbSzwlRuc74Y2HaQ.VXFXbyZIK/ItlEak9Mt/r2
bcrypt 每次都随机生成新盐,所以同一密码每次哈希结果都不同,这不是错误。示例里的哈希是一次真实计算的结果,用它可以校验回 password123。
常见问题
为什么同一个密码每次生成的哈希都不一样?
因为 bcrypt 每次都会生成一个随机盐(22 字符),盐直接写进哈希字符串里。这样同一个密码在不同用户身上得到不同哈希,彩虹表和「哪些用户密码相同」的推断都失效。校验时不需要单独存盐,`bcrypt.compare` 会从哈希里读出来。
cost 设多少合适?
从 10 起步,目标是单次哈希在目标服务器上耗时约 100 毫秒(本页也会显示实际耗时)。每 +1 计算量翻倍,cost 10 是 1024 次迭代、cost 12 是 4096 次。本工具限制在 4–15,因为再高会让页面明显卡住。
密码很长会怎样?
bcrypt 只使用前 72 字节,超出部分被静默丢弃,工具会在字节数超过 72 时给出提示。注意按字节算:一个汉字 3 字节,24 个汉字就到上限了。如果要支持更长的密码,常规做法是先做一次 SHA-256 再交给 bcrypt。
它和 SHA-256、MD5 有什么区别?
SHA-256、MD5 是为速度设计的,攻击者每秒能算几十亿次,不适合存密码;bcrypt 故意慢,而且成本因子可调,硬件变快时提高 cost 就能跟上。另外 bcrypt 自带随机盐,SHA-256 需要你自己加盐并且还要防彩虹表。
输入和哈希会离开浏览器吗?
不会。哈希与校验都通过 bcryptjs 在本地同步计算,页面不发任何网络请求。不过要留意:计算期间主线程被占满,高 cost 下页面会短暂无响应。
关键词:bcryptpasswordhashcostsalt密码哈希加盐校验bcrypt 哈希