bcrypt 密码哈希生成与校验

用 bcrypt 给密码生成带盐哈希(cost 4~14 可调),或校验密码与已有 $2b$ 哈希是否匹配;自动提示 72 字节截断,全部在浏览器本地完成

bcrypt 密码哈希生成与校验是什么

用 bcrypt 给密码生成带随机盐的哈希,或者反过来校验「这个密码是不是这个哈希的原密码」。cost(计算强度)可在 4~14 之间调,每 +1 计算量翻倍。生成时会自动提示是否超过 bcrypt 的 72 字节上限 —— 超了的部分等于没设。全部在浏览器本地完成,密码不会离开你的机器。

所有计算都在你的浏览器本地完成,输入的内容不会上传到服务器。

怎么用bcrypt 密码哈希生成与校验

  1. 在「生成哈希」里输入要哈希的密码,建议 8 位以上,别用已有账号的真实密码
  2. 拖动「计算强度 cost」:默认 10(约几十毫秒),对安全性要求高可以调到 12
  3. 点「生成哈希」,结果形如 $2b$10$… 共 60 个字符,可一键复制或导出
  4. 要校验已有哈希,切到「校验哈希」标签,先粘贴那段 $2b$ 哈希
  5. 再输入待比对的密码,点「校验」,页面会直接告诉你匹配还是不匹配
  6. 哈希里能读出版本($2b$)和 cost,切过去时页面会自动显示出来

示例

输入

correct horse battery staple(cost 10)

输出

$2b$10$bFihFtdLGG7aMiuA3OKIL.PhYJzQ15RWNiAlBUC3ZlepVNDFy3A1m

这是一次真实生成的结果(拿它去「校验哈希」标签里配同样的密码,能验通过)。$2b$ 是版本、10 是 cost、后面 22 位是随机盐;同一密码再点一次生成,结果会完全不同。

常见问题

bcrypt 和 MD5 / SHA-256 有什么区别?

MD5、SHA-256 这类通用哈希是为「快」设计的,一秒能算上亿次,被拖库后可以被高速暴力破解。bcrypt 反过来——故意慢,还带随机盐,而且 cost 可以随硬件进步往上调。存密码应该用 bcrypt / scrypt / Argon2 这类慢哈希,不该用 MD5。

为什么同一个密码两次生成的哈希不一样?

因为每次都用新的随机盐,盐会写在哈希里($2b$10$ 后面那 22 个字符)。校验时程序从哈希里取出盐、用同样的 cost 重算一遍再比对,所以两次结果不同但都能校验通过。这样做的好处是同密码的两个用户哈希不同,攻击者没法批量对照。

cost 选多少合适?

看场景。网页/移动端登录一般 10~12;服务端批量任务可以更高。判断标准是「在目标机器上算一次约 100 毫秒」,太慢会拖垮登录接口,太快则抵挡不住暴力破解。本页上限卡在 14,因为再高浏览器会明显卡住。

密码超过 72 个字节会怎样?

bcrypt 算法本身只处理前 72 字节,多出来的部分不参与计算。也就是说前 72 字节相同的两个密码会被认为是同一个。本页会在输入超过 72 字节时给出红色提示,避免你以为加长密码提升了安全性。

在这里生成哈希安全吗?密码会不会被上传?

不会。bcrypt 的计算完全在你浏览器的 JavaScript 里完成,没有任何网络请求,密码和哈希都不经过服务器。但仍建议用测试用的密码,别把真实账号密码贴进任何网页工具。

小提示

  • bcrypt 只使用密码的前 72 个字节,超出部分被静默丢弃。中文一个字 3 字节,24 个字就到顶了 —— 所以「把密码堆到 100 位」并不更安全,页面会明确提示是否超限
  • 同一个密码每次生成的结果都不一样,因为盐是随机的。这是正确行为:不要拿哈希做等值比较,只能重新哈希再比对
  • cost 每 +1 计算量翻倍:cost 10 大约几十毫秒,cost 14 就到一秒级。放在网页里建议不超过 12,否则点一下会明显卡顿
  • bcrypt 是单向哈希不是加密,没有「解密」这回事。忘记密码时程序只能重置,不能找回 —— 任何号称能解 bcrypt 的工具都是在骗人

同类加密与解密工具