Bcrypt 哈希生成器与验证器
在线生成并验证 bcrypt 密码哈希——可调成本因子,支持 $2b$/$2a$/$2y$ 前缀。100% 在浏览器中运行,密码绝不上传。
什么是 Bcrypt?
Bcrypt 是一种专为安全存储密码而设计的密码哈希函数。服务器不会以明文保存密码,而是存储单向的 bcrypt 哈希;用户登录时,服务器以同样方式哈希提交的密码,并检查两个哈希是否匹配。Bcrypt 构建于 Blowfish 密码之上,由 Niels Provos 和 David Mazières 于 1999 年设计,它有一个刻意的特性使其区别于 SHA-256 这类通用哈希:它是故意慢的,而且随着硬件变快,你还可以通过可调的成本因子让它随时间变得更慢。
bcrypt 哈希是单一、自描述的 60 字符字符串——例如 $2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq。它打包了四部分:版本($2b$)、成本(12,对数级工作因子)、22 个字符的 Base64 盐值,以及 31 个字符的 Base64 摘要。由于盐值是随机的且内嵌在哈希中,同一密码每次都会产生不同的哈希——这能挫败彩虹表,并隐藏两个用户选用了相同密码的事实。验证时会从存储的哈希中读回盐值和成本并对候选密码重新哈希,因此 bcrypt 从不需要(也无法)逆向哈希来还原密码。
本工具使用内置的 bcrypt 实现完全在你的浏览器中运行——任何密码或哈希都不会上传。用它来生成带指定成本和前缀的哈希、用密码验证已有哈希,以及读取哈希的结构。它能与其他安全工具自然搭配:用我们的 htpasswd 生成器(可直接输出 bcrypt 条目)通过 HTTP Basic Auth 保护目录,用我们的 随机密码生成器 生成要哈希的强密码,当你需要快速的通用校验和而非缓慢的密码哈希时,则使用我们的 SHA-256 生成器。如果你正在决定用哪种算法存储密码,可在 bcrypt vs Argon2 vs scrypt 中对比各选项。
// Node.js — bcryptjs / bcrypt (emits $2b$)
const bcrypt = require('bcrypt');
const hash = await bcrypt.hash('correct horse battery staple', 12);
// -> $2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq
const ok = await bcrypt.compare('correct horse battery staple', hash); // true
# Python — bcrypt
import bcrypt
hashed = bcrypt.hashpw(b'correct horse battery staple', bcrypt.gensalt(12))
bcrypt.checkpw(b'correct horse battery staple', hashed) # True
# PHP — password_hash (emits $2y$)
$hash = password_hash('correct horse battery staple', PASSWORD_BCRYPT, ['cost' => 12]);
password_verify('correct horse battery staple', $hash); // true
# Apache htpasswd CLI — bcrypt entry to stdout (-B bcrypt, -b inline, -n stdout)
htpasswd -Bbn admin 'correct horse battery staple'
# -> admin:$2y$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq 核心功能
生成 Bcrypt 哈希
从任意密码生成带全新随机盐值的标准 60 字符 bcrypt 哈希。每次点击都产生一个不同的有效哈希,与真实的密码库行为完全一致。
可调成本因子
在 4 到 15 之间调节工作因子(12 是现代默认值)。感受每一步如何让计算时间大致翻倍,从而挑选一个既强又足够快、不拖慢登录的成本。
选择版本前缀
输出 $2b$(当前 bcryptjs 标准)、$2y$(PHP / Apache htpasswd)或 $2a$(最初版本)。它们在各库间验证时均可互换。
用密码验证哈希
粘贴存储的哈希和候选密码,立即确认它们是否匹配——用内嵌的盐值和成本重新哈希,绝不解密。非常适合调试失败的登录。
哈希结构拆解
查看任意 bcrypt 哈希被拆分为版本、成本、盐值和摘要,让 $2b$12$... 字符串的结构一目了然。
100% 客户端运行
所有哈希计算和验证都在你的浏览器中本地完成。任何密码或哈希都不会发送到服务器,因此你可以私密地处理真实凭证。
Bcrypt 生成器示例
bcrypt 哈希(成本 12,$2b$)
password: correct horse battery staple cost: 12 prefix: $2b$
$2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq
采用 $2b$ 前缀、成本为 12 的 bcrypt 哈希。盐值是随机的,因此同一密码每次都会生成不同的哈希——但它们全都能与原始密码验证通过。
用密码验证哈希
password: correct horse battery staple hash: $2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq
✓ 匹配 — 该密码与此哈希一致
验证不会解密哈希。bcrypt 使用存储哈希中内嵌的盐值和成本对候选密码重新哈希,再比对结果。匹配即表示密码正确。
哈希结构拆解
$2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq
版本: $2b$ · 成本: 12 · 盐值: dUSFKqT1FCMYZ6hcQfsxuO · 摘要: NizEqcX8IGK8snfVSowP5Uu.TDJoPUq
每个 bcrypt 哈希都是自描述的:一个版本标记、两位数的成本、22 个字符的 Base64 盐值和 31 个字符的 Base64 摘要,全部包含在一个 60 字符的字符串中。本工具将它们拆开,让你一眼看清。
如何使用 Bcrypt 生成器
- 1
输入密码并选择成本
在「生成」选项卡上,输入密码或点击「随机密码」。挑选一个成本因子(4–15;12 是现代默认值)和一个版本前缀——$2b$、$2a$ 或 $2y$——以匹配你的技术栈。
- 2
生成哈希
bcrypt 哈希会在本地用全新的随机盐值计算,并显示为一个 60 字符的 $2b$12$... 字符串。点击「复制」获取它,或重新生成一个新的加盐哈希。
- 3
查看结构或验证
结构面板将哈希拆分为版本、成本、盐值和摘要。切换到「验证」选项卡,粘贴存储的哈希和密码,即可立即确认它们是否匹配。
Common Errors
试图解密哈希
Bcrypt 是单向的;不存在解密。要校验密码,请用密码验证哈希,而不是尝试逆向摘要。
bcrypt.decrypt(hash) // no such operation
bcrypt.compare(password, hash) // returns true / false
把成本设得太低
像 4 或 6 这样的低成本几乎瞬间就能哈希,这也让攻击者能快速暴力破解泄露的哈希。请以 12 作为基线。
cost: 4 // far too fast, weak against brute force
cost: 12 // modern default, resists brute force
期望两次得到相同的哈希
由于盐值是随机的,再次哈希同一密码会得到不同的字符串。请用验证来比对,绝不要通过检查两个哈希是否逐字节相等。
hash(pw) === storedHash // fails — different salts
bcrypt.compare(pw, storedHash) // correct check
常见使用场景
- 在数据库中预置密码哈希
- 为管理员或测试账户生成一个 bcrypt 哈希,直接插入到你的 users 表中,这样你无需先搭建完整的注册流程即可登录。
- 调试失败的登录
- 用已知正确的密码验证存储的哈希,确认哈希本身是否正确,从而把 bug 从你的认证代码中隔离出来。
- 挑选合适的成本因子
- 在你自己的硬件上以多个成本级别生成哈希以感受各自耗时,再选择一个既能抵御暴力破解又不拖慢真实登录的工作因子。
- 创建 htpasswd / Basic Auth 条目
- 为 Apache、Docker Registry 或 Caddy 凭证生成 $2y$ bcrypt 哈希,再将其放入用于 HTTP Basic Auth 的 user:hash 行。
- 构建测试夹具
- 生成按密码确定的 bcrypt 哈希,用于预置登录或密码重置流程的集成测试,无需搭建真实的认证服务器。
- 审计你发现的哈希
- 读取配置或转储中某个 bcrypt 字符串的结构以检查其成本因子,并用你预期的密码验证它以确认是否匹配。
技术细节
- 基于 Blowfish,自适应成本
- Bcrypt 的哈希源自 Blowfish 密码昂贵的密钥设置过程,重复执行 2^cost 次。成本每加 1,工作量翻倍,使该函数随硬件进步仍能抵御暴力破解。
- 128 位随机盐值
- 每个哈希内嵌一个 16 字节(128 位)随机盐值,以 Base64 编码为成本之后的 22 个字符。盐值使每个哈希都唯一,因此相同的密码绝不会共用摘要,彩虹表也无从下手。
- 自描述的 60 字符格式
- 输出为 $版本$成本$盐值+摘要——一个固定的 60 字符字符串,承载了验证它所需的全部信息。无需单独的盐值列或参数存储。
- 72 字节密码上限
- Bcrypt 只哈希密码的前 72 字节;超出部分会被静默忽略。对于很长的口令,常见的缓解办法是在 bcrypt 之前先预哈希(例如用 SHA-256)。
- 验证,而非解密
- Bcrypt 是单向的。验证会用从存储哈希中解析出的盐值和成本对候选密码重新运行哈希,再以恒定时间比较摘要。没有任何操作能还原明文。
- 诚实说明与注意事项
- 哈希在本地计算,绝不会与实际系统校验。复制的哈希以及你输入的任何密码会留存在剪贴板和浏览器内存中——请将它们视为机密,并在粘贴进生产环境后清空剪贴板。
最佳实践
- 使用成本 12 或更高
- 成本 12 是现代基线;在登录延迟仍可接受的前提下,可为敏感系统提高到 14 左右。定期重新评估——五年前足够慢的设置,如今攻击起来已经很廉价。
- 绝不存储或记录明文
- 只存储 bcrypt 哈希,绝不存储原始密码,并让密码远离日志和错误信息。如果明文随哈希一同泄露,bcrypt 的全部价值就荡然无存了。
- 让 bcrypt 处理盐值
- Bcrypt 会为你生成并内嵌一个安全的随机盐值。不要提供你自己的静态盐值,也不要重复使用——每次哈希一个随机盐值,正是挫败彩虹表的关键。
- 留意 72 字节上限
- 如果你接受长口令,记住 bcrypt 会忽略 72 字节之后的内容。当很长的输入必须被完整覆盖时,可考虑先用 SHA-256 预哈希,或评估 Argon2id。
Bcrypt 生成器常见问题
在线 bcrypt 生成器使用起来安全吗?
如何在线生成 bcrypt 哈希?
$2b$ 适用于大多数现代技术栈,$2y$ 对应 PHP 和 Apache,$2a$ 则是最初的标识符。bcrypt 哈希会在你的浏览器中用全新的随机盐值即时计算,并以单个 60 字符的 $2b$12$... 字符串呈现,可一键复制。任何内容都不会上传:密码和哈希绝不会离开你的设备。随时再次生成即可为同一密码得到另一个有效哈希,因为每个哈希都带有不同的随机盐值。 bcrypt 哈希能被解密或逆向吗?
我应该使用多大的成本因子(工作因子)?
$2a$、$2b$ 和 $2y$ 有什么区别?
$2a$ 是最初被广泛使用的标识符;$2b$ 是修正后的当前版本,bcryptjs 库和大多数现代实现都生成它;$2y$ 则是 PHP 和 Apache htpasswd 使用的标识符。就验证而言它们可以互换——你在这里用任意前缀生成的哈希都能在各个库中正确验证,因为它们运行的是同一套核心函数。如果你需要逐字节兼容,请选择你技术栈所期望的前缀。 如何用密码验证一个 bcrypt 哈希?
$2b$12$... 字符串)和候选密码,工具会立即告诉你它们是否匹配。它的原理是提取哈希中内嵌的盐值和成本,用这些完全相同的参数对候选密码重新哈希,再将新摘要与存储的摘要比对——其中不涉及任何解密。登录系统正是这样校验密码的:它从不还原明文,只确认对提交的密码重新哈希能复现出存储的哈希。 bcrypt、Argon2 还是 scrypt——我该用哪个?
为什么 bcrypt 哈希每次都不一样?
相关工具
查看所有工具 →JWT 解码器 · 在线解码工具
安全工具
免费 JWT 解码器,在线即时解码 JWT 令牌。查看头部、载荷、签名以及过期时间、算法和声明详情。100% 浏览器本地运行——令牌绝不离开你的设备。无需注册、无跟踪。
JWT 编码器与生成器
安全工具
免费在线 JWT 生成器与编码器。构建头部和载荷,使用 HS256、RS256 或 ES256 即时签名。100% 浏览器本地运行——你的密钥和私钥绝不离开设备。
在线 MD5 哈希生成器与文件校验工具
安全工具
在线生成 MD5、SHA-256、SHA-1、SHA-512 哈希值 — 完全免费,浏览器本地运算,无需注册。支持文本和文件哈希、校验和验证、哈希值对比,一键复制,数据绝不离开你的设备。
随机密码生成器 — 自定义长度、强度与安全性
安全工具
免费在线随机密码生成器,一键生成高强度安全密码。支持自定义长度、字符类型,批量生成多个密码。所有密码仅在浏览器本地生成,不上传不存储。
SHA-1 哈希生成器(160 位遗留算法)
安全工具
在浏览器中生成 SHA-1 哈希值 — 40 字符十六进制输出,无需上传。适用于 Git 指纹查询、旧证书核验和迁移审计的遗留工具。数据绝不离开你的设备。
SHA-256 哈希生成器与校验和工具
安全工具
免费在线生成 SHA-256 哈希值。在浏览器中对文本或文件进行哈希、验证校验和,复制 64 字符十六进制输出。无需注册,数据不离开页面。