实用工具

bcrypt 加密与校验工具

按指定成本因子生成 bcrypt 哈希,或校验明文密码是否与已有的 $2a$/$2b$/$2y$ 哈希匹配。

浏览器本地运行哈希与加密3797
免费

输入

0 B

结果

结果会显示在这里。

Laravel、Spring Security、Rails 的 has_secure_password 默认都用 bcrypt 存密码,所以迟早会遇到两件事:给种子用户手工生成一个哈希,或者排查某个账号为什么总是登录失败。这个工具两件都能做——按选定的成本因子给密码生成哈希,或者粘贴数据库里存的哈希,看某个密码能不能对上。底层是 bcrypt.js(dcodeIO/bcrypt.js,3.8k star,BSD-3-Clause),一个零依赖的纯 JavaScript 实现,生成的哈希与 PHP password_hash、Python bcrypt、Go x/crypto/bcrypt 完全通用。注意 bcrypt 是哈希不是加密,没有「解密」这回事,只能校验。

它是怎么工作的

  • 每次生成都用 crypto.getRandomValues 取一个新的 128 位盐,所以同一个密码算两次会得到两个不同的 60 字符哈希,而两者都能校验通过。
  • 成本因子是轮数的以 2 为底的对数:cost 10 即 1,024 轮,每加 1 耗时翻倍;结果里显示的耗时是在你这台设备上实测的。
  • 校验时用存储哈希里自带的盐和成本重新计算,再做常数时间比较,和服务端登录校验的逻辑完全一致。
  • bcrypt 只读取密码的前 72 个字节,超出部分会被标出;粘贴时带进来的末尾换行会被去掉,空格则保留。

你的数据去了哪里

哪也没去。本工具完全在你的浏览器里运行:你粘贴的文本由页面处理,不会传输到任何服务器,也不会写进任何日志。

本工具会接触密钥和凭证,因此任何一次运行都不会被保存,连你自己的历史里也不会有。

它要花多少

本工具完全免费,不需要登录,也不消耗积分。

常见问题

成本因子设多少合适?
OWASP 密码存储备忘单要求至少 10。实际做法是选你的登录服务器能承受的最高值——在那台机器上实测每次哈希大约 100–250 毫秒,而不是以这里的耗时为准。cost 12 是 cost 10 的 4 倍耗时,15 是 32 倍;达到 13 及以上时工具会提醒你,因为每一次登录和攻击者的每一次猜测都要付出这个代价。
$2a$、$2b$、$2y$ 有什么区别?
算法完全相同,只是修复历史 bug 后打的不同标签。$2y$ 是 PHP 的 crypt_blowfish 在 2011 年修复非 ASCII 字节符号扩展漏洞后引入的;$2b$ 是 OpenBSD 在 2014 年修复密码长度在 256 字节处回绕的问题后引入的。只要密码短于 72 字节,三者除前缀外结果一模一样,主流库也都能校验这三种前缀。
为什么很长的密码改了结尾还能校验通过?
因为所有 bcrypt 实现都看不到第 72 字节之后的内容。72 字节相当于 72 个英文字符,但在 UTF-8 下只有 24 个汉字,中文口令很容易超限。如果必须支持更长的口令,有的系统会先做 SHA-256 再 Base64 编码后交给 bcrypt——千万别直接传原始二进制摘要,其中的零字节在很多实现里会截断密码。
2026 年了,bcrypt 还能用吗?
还能用,而且远好于 MD5、SHA-256 这类快速哈希。但 OWASP 现在把 Argon2id 排第一、scrypt 第二,因为 bcrypt 内存占用小,用 GPU 和专用硬件破解的成本相对更低。已经在用 bcrypt 的系统,常见做法是逐步调高成本因子,并在用户下次登录时重新哈希。
密码和哈希会被上传吗?
不会。生成和校验都在当前页面的 JavaScript 里完成,没有任何网络请求,站点也不记录这次运行——即使你已登录,历史记录里也不会有。

背后的开源项目

本工具运行在 dcodeIO/bcrypt.js 之上,以 BSD-3-Clause 许可发布。如果你需要在自己的程序里实现同样的能力,直接用这个库。

dcodeIO/bcrypt.js

也常被称作

  • bcrypt在线加密
  • bcrypt解密
  • bcrypt校验
  • bcrypt密码生成
  • password_hash 在线
  • bcrypt cost