跳到主要内容
加密解密2026-07-03Begin4 分钟阅读

在线 Bcrypt 哈希工具:工作因子、盐值与口令校验

什么是 Bcrypt

Bcrypt 是基于 Blowfish 的密码哈希函数,由 Niels Provos 和 David Mazières 于 1999 年设计。二十多年来它一直是口令存储的主力:主流语言都有经实战检验的实现,磁盘上的一串同时编码了算法版本、成本与盐。

与普通哈希(如 SHA-256)不同,Bcrypt 为口令存储设计,内置盐和可调工作因子。打开 Bcrypt 哈希工具 即可在浏览器本地生成或校验。

为什么需要 Bcrypt

  1. 抵抗暴力破解:可调节的计算成本让暴力破解变得不切实际
  2. 内置盐值:每次哈希自动生成随机盐值,防止彩虹表攻击
  3. 工作因子可调:随着硬件性能提升,可以增加计算成本
  4. 时间-成本权衡:合法用户登录只需几百毫秒,但攻击者尝试十亿次密码需要数百年

Bcrypt 哈希格式

Bcrypt 哈希的格式为:

$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
│  │  │  └─────────────────────────────────── 22位盐值
│  │  └────────────────────────────────────── 31位哈希值
│  └───────────────────────────────────────── 工作因子(cost=10)
└──────────────────────────────────────────── 算法版本(2a)
部分说明
$2a$算法版本(2a / 2b / 2y)
$10$工作因子(2^10 = 1024 次迭代)
N9qo8uLOickgx2ZMRZoMye22 字符盐值
IjZAgcfl7p92ldGxad68LJZdL17lhWy31 字符哈希值

工作因子(Cost Factor)

工作因子决定了 Bcrypt 的计算成本,是 2 的幂次:

工作因子迭代次数近似耗时(2024年硬件)
8256 次~30ms
101,024 次~100ms
124,096 次~300ms
1416,384 次~1.2s

调参目标:在生产硬件上让交互登录耗时约 100–300ms。2026 年笔记本上通常落在 12–13;新建系统里 cost 10 往往偏便宜。

如何使用在线 Bcrypt 哈希工具

使用 ToolVault 工具匣 的 Bcrypt 哈希工具:

生成哈希

  1. 输入明文密码
  2. 选择工作因子(默认 10)
  3. 点击 Hash 按钮
  4. 复制生成的 Bcrypt 哈希值

验证密码

  1. 输入 Bcrypt 哈希值
  2. 输入待验证的密码
  3. 点击 Verify 按钮
  4. 工具显示密码是否匹配

代码示例

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 则是用错工具。

能扛住审计的存储习惯

  1. 永不存明文口令 —— 只用 bcrypt 或 Argon2id
  2. UI 允许长口令 —— bcrypt 在 72 字节 截断;写清限制,优先用不触顶的 passphrase,或仅在完全理解代价时做 SHA-256 预哈希
  3. 随硬件抬高 cost —— 下次登录成功时 compare-and-rewrite(成本写在哈希串里)
  4. 改密即重哈希 —— 新盐 + 当前 cost
  5. 常量时间比较 —— 用库的 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 工具匣 提供。更多开发者工具请访问 首页。