WALUDO 工具箱
CRYPTO.03 BCRYPT GENERATOR

Bcrypt 生成器

生成与验证共用密码输入,右侧 Hash Inspector 自动解释结果;成本、耗时和 72 字节边界都在操作位置附近出现。

PASSWORD

密码与生成参数

常见兼容基线,生产环境仍需实测

输入密码生成,或在右侧粘贴 Hash 验证

bcrypt.js 异步本地计算 · 密码与 Hash 不上传、不保存

§ 01

生成和验证围绕同一份密码工作

1
1

输入密码并看字节

Bcrypt 的经典输入上限是 72 UTF-8 字节,中文和 emoji 会占多个字节。超过时应先调整密码策略,而不是忽略提示。

2
2

选择 Cost

Cost 每增加 1,计算量大致翻倍。默认 12 是常见起点,但生产值必须在真实服务器上测量并控制登录延迟。

3
3

生成或验证

生成结果会自动填入验证区。验证时输入明文和完整 Hash,页面会读取内嵌 salt 与 cost 后比较。

§ 02

Bcrypt 通过故意变慢保护密码猜测成本

Bcrypt 是密码哈希,不是可逆加密。每个结果包含版本、Cost、随机 salt 和哈希主体;验证时不需要另存 salt,库会从完整字符串中读取参数。

正常登录只计算一次,而攻击者需要为每个猜测重复高成本运算。Cost 应随硬件与风险定期评估,但不能盲目提高到拖垮登录服务。

§ 03

Cost Factor 的数量级与用途

Cost
大约轮次
建议
4–9
16–512
本地测试与演示
10–11
1024–2048
旧系统与低性能环境
12
4096
常见基线,仍需硬件实测
13–14
8192–16384
更高成本,评估登录延迟
15
32768
浏览器中可能明显变慢
§ 04

72 字节限制与版本前缀是常见兼容坑

Bcrypt 传统规范只使用前 72 个密码字节。72 个 ASCII 字符正好 72 字节,但中文通常是 3 字节,许多 emoji 是 4 字节;字符数相同不代表字节数相同。

常见前缀有 2a、2b 与 2y。现代新结果通常使用 2b,2y 常见于 PHP 生态。跨语言迁移时应使用维护中的库并用真实样本验证,不要手工修改 Hash 主体。

§ 05

多语言 Bcrypt 生成与验证

import bcrypt from 'bcryptjs';
const hash = await bcrypt.hash(password, 12);
const valid = await bcrypt.compare(password, hash);
§ 06

常见问题

Q1Bcrypt 可以解密吗?

不能。验证会用 Hash 内嵌的 salt 与 Cost 重新计算输入密码,再比较结果;忘记密码应重置,而不是尝试解密。

Q2Cost 12 一定适合生产环境吗?

不一定。它是常见起点,真正选择要在生产硬件上基准测试,并考虑并发登录、攻击限速和用户体验。

Q3为什么相同密码每次 Hash 都不同?

每次生成会使用新的随机 salt。不同字符串仍能各自验证同一密码,这正是抵抗彩虹表与批量预计算的设计。

Q4密码会上传或保存吗?

不会。bcrypt.js 在当前页面异步计算,输入、结果与验证状态不发送到服务器,也不写入浏览器存储。

Q5新项目应该选 Bcrypt 还是 Argon2id?

两者都可用于密码存储。新系统通常优先评估 Argon2id;需要广泛框架兼容或既有 Bcrypt 数据时,Bcrypt 仍很常见。

✳ WALUDO TOOLBOX ✳ 浏览器原生工具集 · NO SERVER · NO DATA COLLECTION

您的文件永远不会离开您的电脑 · FILES STAY LOCAL · PRIVACY FIRST