用 bcrypt 给密码生成带随机盐的哈希,或者反过来校验「这个密码是不是这个哈希的原密码」。cost(计算强度)可在 4~14 之间调,每 +1 计算量翻倍。生成时会自动提示是否超过 bcrypt 的 72 字节上限 —— 超了的部分等于没设。全部在浏览器本地完成,密码不会离开你的机器。
工具界面在页面加载完成后显示在本段下方,可以直接使用。所有计算都在你的浏览器本地完成,输入的内容不会上传到服务器。
用 bcrypt 给密码生成带随机盐的哈希,或者反过来校验「这个密码是不是这个哈希的原密码」。cost(计算强度)可在 4~14 之间调,每 +1 计算量翻倍。生成时会自动提示是否超过 bcrypt 的 72 字节上限 —— 超了的部分等于没设。全部在浏览器本地完成,密码不会离开你的机器。
输入:
correct horse battery staple(cost 10)
输出:
$2b$10$bFihFtdLGG7aMiuA3OKIL.PhYJzQ15RWNiAlBUC3ZlepVNDFy3A1m
这是一次真实生成的结果(拿它去「校验哈希」标签里配同样的密码,能验通过)。$2b$ 是版本、10 是 cost、后面 22 位是随机盐;同一密码再点一次生成,结果会完全不同。
MD5、SHA-256 这类通用哈希是为「快」设计的,一秒能算上亿次,被拖库后可以被高速暴力破解。bcrypt 反过来——故意慢,还带随机盐,而且 cost 可以随硬件进步往上调。存密码应该用 bcrypt / scrypt / Argon2 这类慢哈希,不该用 MD5。
因为每次都用新的随机盐,盐会写在哈希里($2b$10$ 后面那 22 个字符)。校验时程序从哈希里取出盐、用同样的 cost 重算一遍再比对,所以两次结果不同但都能校验通过。这样做的好处是同密码的两个用户哈希不同,攻击者没法批量对照。
看场景。网页/移动端登录一般 10~12;服务端批量任务可以更高。判断标准是「在目标机器上算一次约 100 毫秒」,太慢会拖垮登录接口,太快则抵挡不住暴力破解。本页上限卡在 14,因为再高浏览器会明显卡住。
bcrypt 算法本身只处理前 72 字节,多出来的部分不参与计算。也就是说前 72 字节相同的两个密码会被认为是同一个。本页会在输入超过 72 字节时给出红色提示,避免你以为加长密码提升了安全性。
不会。bcrypt 的计算完全在你浏览器的 JavaScript 里完成,没有任何网络请求,密码和哈希都不经过服务器。但仍建议用测试用的密码,别把真实账号密码贴进任何网页工具。