在线 Bcrypt 哈希工具:工作因子、盐值与口令校验
什么是 Bcrypt
Bcrypt 是基于 Blowfish 的密码哈希函数,由 Niels Provos 和 David Mazières 于 1999 年设计。二十多年来它一直是口令存储的主力:主流语言都有经实战检验的实现,磁盘上的一串同时编码了算法版本、成本与盐。
与普通哈希(如 SHA-256)不同,Bcrypt 为口令存储设计,内置盐和可调工作因子。打开 Bcrypt 哈希工具 即可在浏览器本地生成或校验。
为什么需要 Bcrypt
- 抵抗暴力破解:可调节的计算成本让暴力破解变得不切实际
- 内置盐值:每次哈希自动生成随机盐值,防止彩虹表攻击
- 工作因子可调:随着硬件性能提升,可以增加计算成本
- 时间-成本权衡:合法用户登录只需几百毫秒,但攻击者尝试十亿次密码需要数百年
Bcrypt 哈希格式
Bcrypt 哈希的格式为:
$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
│ │ │ └─────────────────────────────────── 22位盐值
│ │ └────────────────────────────────────── 31位哈希值
│ └───────────────────────────────────────── 工作因子(cost=10)
└──────────────────────────────────────────── 算法版本(2a)
| 部分 | 说明 |
|---|---|
$2a$ | 算法版本(2a / 2b / 2y) |
$10$ | 工作因子(2^10 = 1024 次迭代) |
N9qo8uLOickgx2ZMRZoMye | 22 字符盐值 |
IjZAgcfl7p92ldGxad68LJZdL17lhWy | 31 字符哈希值 |
工作因子(Cost Factor)
工作因子决定了 Bcrypt 的计算成本,是 2 的幂次:
| 工作因子 | 迭代次数 | 近似耗时(2024年硬件) |
|---|---|---|
| 8 | 256 次 | ~30ms |
| 10 | 1,024 次 | ~100ms |
| 12 | 4,096 次 | ~300ms |
| 14 | 16,384 次 | ~1.2s |
调参目标:在生产硬件上让交互登录耗时约 100–300ms。2026 年笔记本上通常落在 12–13;新建系统里 cost 10 往往偏便宜。
如何使用在线 Bcrypt 哈希工具
使用 ToolVault 工具匣 的 Bcrypt 哈希工具:
生成哈希
- 输入明文密码
- 选择工作因子(默认 10)
- 点击 Hash 按钮
- 复制生成的 Bcrypt 哈希值
验证密码
- 输入 Bcrypt 哈希值
- 输入待验证的密码
- 点击 Verify 按钮
- 工具显示密码是否匹配
代码示例
Node.js
const bcrypt = require('bcrypt');
// 生成哈希
const hash = await bcrypt.hash('myPassword123', 10);
// '$2a$10$N9qo8uLOickgx2ZMRZoMye...'
// 验证密码
const isMatch = await bcrypt.compare('myPassword123', hash);
// true
Python
import bcrypt
# 生成哈希
password = b'myPassword123'
hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=10))
# 验证密码
is_match = bcrypt.checkpw(password, hashed)
# True
Go
import "golang.org/x/crypto/bcrypt"
// 生成哈希
hash, err := bcrypt.GenerateFromPassword([]byte("myPassword123"), 10)
// 验证密码
err = bcrypt.CompareHashAndPassword(hash, []byte("myPassword123"))
// nil if match
Bcrypt 与其他哈希(以及和文件哈希的分界)
| 算法 | 速度 | 盐值 | 工作因子 | 典型用途 |
|---|---|---|---|---|
| MD5 | 极快 | ❌ 需手动 | ❌ | 不用于口令 |
| SHA-256 | 快 | ❌ 需手动 | ❌ | 文件完整性 —— 见 哈希校验 |
| Argon2id | 可调 + 内存硬化 | ✅ 内置 | ✅ | 库支持扎实的新口令库 |
| Bcrypt | 可调 | ✅ 内置 | ✅ | 存量库;cost ≥12 仍稳健 |
不要把 bcrypt 和 SHA-256 文件校验混为一谈。 哈希校验回答「下载是否与公布摘要一致」;bcrypt 回答「口令是否匹配库存凭证」。把口令丢进无盐、无成本的 SHA-256 是存储反模式;把 ISO 丢进 bcrypt 则是用错工具。
能扛住审计的存储习惯
- 永不存明文口令 —— 只用 bcrypt 或 Argon2id
- UI 允许长口令 —— bcrypt 在 72 字节 截断;写清限制,优先用不触顶的 passphrase,或仅在完全理解代价时做 SHA-256 预哈希
- 随硬件抬高 cost —— 下次登录成功时 compare-and-rewrite(成本写在哈希串里)
- 改密即重哈希 —— 新盐 + 当前 cost
- 常量时间比较 —— 用库的
compare/timingSafeEqual,不要对哈希串做===
站内密码簇怎么串
| 步骤 | 工具 / 指南 |
|---|---|
| 生成随机口令 | 密码生成器 · 生成器指南 |
| 估熵 / 拒模式 | 强度检测 · 强度指南 |
| 落库 / 校验 | Bcrypt 工具 · 本文 |
| 校验文件下载 | 哈希校验器 —— 不是 bcrypt |
工作因子:唯一值得拧的旋钮
cost 是迭代次数的 log2:cost 10 = 1024 次,+1 耗时翻倍。调参方法:在生产硬件上实测,瞄准每次哈希 100–250ms(登录可感知但不痛苦;对撞库攻击者按泄露哈希批量试时则很贵)。迁移细节:抬高 cost 不会让旧哈希失效——校验从串里读旧 cost——可在下次登录成功时按用户逐步升级,无需旗日。
实现注记
本站工具在浏览器里用 bcryptjs:hashSync / compareSync,轮数滑条 4–14(高轮数可能让标签页卡住数秒——慢正是设计目标)。生产服务应按自己的 CPU 测 cost,不要抄笔记本风扇转速。72 字节截断是算法属性不是 UI bug——UTF-8 口令可能比「72 个字符」更早触顶。$2a$ / $2b$ / $2y$ 校验大多互通;用维护中的库生成,勿手改前缀。
FAQ
新项目用 Bcrypt 还是 Argon2id?
Argon2id 是 2015 年口令哈希竞赛获胜者,内存硬化(GPU/ASIC 要为内存买单)。Bcrypt 仍然稳健且无处不在。库支持扎实的新项目可用 Argon2id;已有 bcrypt 行在 cost ≥12 时不必为迁移而迁移。
为什么 Bcrypt 哈希每次结果不同?
每次自动生成随机盐。相同口令也会得到不同完整串;校验用存下的盐重算比对。
工作因子设多少合适?
让生产环境登录约 100–300ms。2026 年常见落点是 12–13。硬件变快后,用登录时重写逐步抬高。
本文由 ToolVault 工具匣 提供。更多开发者工具请访问 首页。
相关工具
相关文章
后量子迁移自查清单:从算法盘点到 hybrid TLS,2026 年该做完的 12 件事
后量子密码(PQC)迁移的实操自查框架:三张监管时刻表为什么让 2026 成为起点、算法盘点(CBOM)怎么做、按 HNDL 暴露度排优先级、X25519+ML-KEM 混合 TLS 怎么开,以及 crypto-agility 的工程落地。附 12 项可勾选 checklist。
Passkeys 完全指南:为什么服务器再也存不了你的密码副本
Passkey(WebAuthn/FIDO2)加深:注册与断言仪式、平台认证器与漫游密钥、同步通行密钥取舍、与密码/TOTP/JWT 的关系,以及 origin 绑定如何结构性抗钓鱼。服务器只存公钥;站内无独立 Passkey 工具页的说明。
ML-KEM 入门:Kyber 是怎么进到你的 TLS 握手里的
后量子密钥封装 ML-KEM(FIPS 203,前身 Kyber)的工程向解读:Kyber 到标准名的变迁、封装/解封装语义与 IND-CCA、三档参数尺寸、X25519+ML-KEM 与 TLS 1.3 HKDF 密钥调度的混合方式、ClientHello 膨胀中间盒坑、OpenSSL 3.5 / nginx 开法,以及浏览器侧实现边界。