关于此工具
Bcrypt 是一种被刻意设计得很慢的密码哈希函数,而这正是你想要的:它让暴力破解的代价变高。它的成本因子让你在硬件变快时提高这种慢度。使用“生成哈希”标签把密码转成 bcrypt 哈希以填充测试数据库,使用“验证”标签检查某个密码是否与你已有的哈希匹配。
它使用 bcryptjs 库在你的浏览器中运行,因此不会有任何密码被发送到服务器。请注意,bcrypt 用于存储密码,而不是可逆的加密。
常见问题
为什么密码要用 bcrypt 而不是 SHA-256?
SHA-256 速度很快——这对文件完整性校验很好,但对密码来说却很糟糕,因为攻击者每秒能尝试数十亿次猜测。bcrypt 则故意设计得很慢,并且每次哈希都带有随机盐值,这使得暴力破解和预先计算的彩虹表攻击都变得不切实际。
"成本"(cost)数值是什么意思?
成本是一个以 2 为底的工作因子:每 +1,计算哈希所需的时间大约翻一倍。成本 10(默认值)大约耗时几十毫秒;成本 14-15 可能耗时数秒。请选择服务器每次登录能承受的最高成本,同时又不至于成为瓶颈。
我的密码会被发送到服务器吗?
不会。哈希计算和验证完全在你的浏览器中进行,在支持的情况下会使用 Web Worker,这样即使成本为 15 的哈希运算也不会冻结页面。你在这里输入的任何内容都不会被传输或存储到任何地方。
为什么同一个密码每次生成的 bcrypt 哈希都不一样?
bcrypt 每次哈希时都会生成一个全新的随机盐值,这个盐值就嵌入在输出字符串本身中($2b$10$<盐值><哈希>)。这是正常现象,正是它防止了两个相同密码产生相同哈希。
为什么验证失败提示的是"哈希格式无效"而不是"不匹配"?
有效的 bcrypt 哈希始终符合 $2a/b/x/y$<成本>$<53 个字符> 这样的格式。如果你粘贴的内容不符合这个格式——被截断、算法错误、有多余空白——这是与密码错误完全不同的问题,因此会单独报告。