Bcrypt 哈希与验证
在浏览器中为密码生成加盐 bcrypt 哈希,并用明文验证已有哈希。
在浏览器中为密码生成加盐 bcrypt 哈希,并用明文验证已有哈希。 在浏览器中为密码生成加盐 bcrypt 哈希,并用明文验证已有哈希。
在浏览器中为密码生成加盐 bcrypt 哈希,并用明文验证已有哈希。
在浏览器中为密码生成加盐 bcrypt 哈希,并用明文验证已有哈希。 在浏览器中为密码生成加盐 bcrypt 哈希,并用明文验证已有哈希。
bcrypt 是 1999 年由 Niels Provos 和 David Mazieres 设计的自适应密码哈希函数。 与 MD5、SHA-256 这类快速摘要不同,bcrypt 有意消耗 CPU 时间:每次哈希都会以可 配置的轮数运行 Blowfish 加密算法,成本因子每增加 1,工作量就翻一倍。这种减速 正是让离线字典攻击和暴力破解变得昂贵的原因。正确的 bcrypt 实现还会把 128 位 随机盐嵌入输出字符串,因此同一密码的两次哈希结果总是不同,彩虹表对它也毫无 用处。
一个 bcrypt 哈希形如 $2b$12$e0.6kJ8a5X8u5Yp3qR5E0e9dF4z3W2c1v0b9n8m7l6k5j4h3g2f1。
开头的美元符号分隔的各段携带算法版本、成本和盐:
$2b$ -- 算法修订版本。$2a$ 与 $2y$ 是较老的变体,对 8 位符号位缺陷的
处理略有不同;$2b$ 是当前推荐版本,也是 bcryptjs 的输出格式。12 -- 成本因子。2^12 = 4096 轮密钥扩展。每 +1 时间翻倍;交互式登录默认
10-12 即可,存储凭据可用 12-14。在输入框中输入密码,选择成本因子,然后点击"生成哈希"。生成的哈希会出现在 输出框中,并同时填入验证字段。要检查已有哈希,把哈希粘贴到验证字段,然后在 输入框中输入候选密码:页面会立即比对,显示绿色对勾或红色叉号。由于比对使用 bcrypt.compareSync 完成,它永远不会暴露错误猜测的接近程度——每次尝试都会完整 哈希后才得出结果。
bcrypt 会把输入截断到 72 字节:更长的密码会被静默截断,因此前 72 字节相同的 两个密码会被判定相等。如果需要更长输入,先用 SHA-256(十六进制)预哈希,再对 摘要做 bcrypt。bcrypt 是刻意轻内存的算法——它对 GPU 阵列的抵抗不如 Argon2 或 scrypt 这类内存硬算法,但 4KB 表和 64 字节状态仍然让廉价的 ASIC 破解缺乏吸引 力。全新系统通常更适合 Argon2id;bcrypt 依然是兼容性极好、广受支持的选项, 尤其适合无法提供 Argon2 的运行环境。本页面完全在浏览器中运行:密码和哈希 永远不会离开你的设备,代码路径(MIT/BSD 的 bcryptjs)已内置于 public/assets。