Skip to main content
UFOZoo

在线Bcrypt密码哈希生成器 哈希与校验工具

存储用户密码时,生成 bcrypt 密码哈希,支持自定义成本因子(轮数4-16)。哈希与校验一体化,并提供密码强度评估和耗时估算。

更新于 2026-08-16

相关工具

功能特性

  • 即时生成 bcrypt 密码哈希
  • 可调节成本因子(轮数 4–16),随硬件升级增强安全性
  • 内置密码验证功能,比对已有 bcrypt 哈希
  • 行业标准盐值生成:每次哈希自动生成唯一盐值
  • 一键复制哈希值到剪贴板
  • 密码强度评估:配合哈希结果显示弱/中/良/强等级视觉指示
  • 成本因子耗时估算:显示选定轮数下的预计计算时间
  • 哈希结构分解:分别展示版本号、成本因子、盐值和哈希体,便于学习理解
  • 72 字节截断提醒:输入超过 bcrypt 限制时主动警告

使用方法

  1. 1选择模式:Hash(生成新哈希)或 Verify(验证密码与哈希是否匹配)。
  2. 2Hash 模式下,输入密码并调节成本因子滑块。
  3. 3点击生成按钮,bcrypt 哈希即时显示,包含盐值和成本因子。
  4. 4点击复制图标复制完整哈希字符串(例如 $2b$10$...)。
  5. 5Verify 模式下,同时输入密码和 bcrypt 哈希,点击验证查看是否匹配。
  6. 6如何选择成本因子:大多数应用从 10 开始。敏感数据用 12。仅当能容忍 1 秒以上哈希时间时才使用 14+。
  7. 7如何验证数据库中的密码哈希:切换到 Verify 模式,粘贴存储的 bcrypt 哈希,输入用户密码,点击验证。工具自动提取盐值和成本。
  8. 8如何解读 bcrypt 哈希:$2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy,版本 $2b$,成本因子 10,22 字符盐值,31 字符哈希体。
  9. 9如何处理 72 字节限制:bcrypt 只处理密码的前 72 字节。长密码可先用 SHA-256 预哈希后再使用 bcrypt。
  10. 10如何测试密码强度:输入密码并观察强度指示器。强密码配合成本因子 10+ 可提供稳健的暴力破解防护。

常见问题

什么是 bcrypt,为什么用于密码存储?

Bcrypt 是 Niels Provos 和 David Mazières 于 1999 年设计的密码哈希函数。它使用盐值抵御彩虹表攻击,并具有可调节的成本因子,使计算刻意变慢,即使硬件升级也难以暴力破解。它是密码存储的行业标准。(参见:bcrypt paper (1999))

成本因子(轮数)是什么意思?

成本因子控制哈希的计算复杂度。每增加 1,计算时间翻倍。默认值 10 表示 2^10 = 1024 轮。大多数应用推荐 10–12。更高值(14+)安全性更强,但在慢速设备上可能导致明显延迟。(参见:bcrypt paper (1999))

为什么 bcrypt 比 SHA-256 更适合密码存储?

SHA-256 的设计目标就是快,这使得它容易受到暴力破解和 GPU 加速攻击。Bcrypt 刻意缓慢,且每个密码使用唯一盐值,防止彩虹表攻击。即使成本因子仅为 10,bcrypt 也比单次 SHA-256 慢数百倍。

可以验证数据库中已有的密码哈希吗?

可以。使用 Verify 模式:粘贴数据库中的 bcrypt 哈希和待验证的密码。工具从哈希中提取盐值和成本因子重新计算以验证是否匹配。所有数据均在浏览器本地处理。

Bcrypt 哈希长什么样?

Bcrypt 哈希格式为:$2b$<成本因子>$<22字符盐值><31字符哈希值>。例如:$2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy。其中包含版本号($2b$)、成本因子(10)、22 字符 base64 盐值和 31 字符 base64 哈希。

Bcrypt 哈希能被破解吗?

Bcrypt 刻意减慢计算速度以抵抗破解。但即使使用 bcrypt,弱密码仍可通过字典攻击被破解。始终使用强随机密码并配合适当的成本因子(10+)。

$2a$、$2b$ 和 $2y$ 版本有什么区别?

$2a$ 是原始版本。$2b$(当前标准)修复了 $2a$ 中与非 ASCII 字符处理相关的错误。$2y$ 是 PHP 特定变体。大多数现代系统使用 $2b$,本工具生成 $2b$ 哈希。

Bcrypt 的盐值如何工作?

Bcrypt 自动为每个哈希生成密码学随机的 128 位(22 字符 base64)盐值。该盐值嵌入在哈希输出字符串中,无需单独存储。相同密码会产生不同的哈希值。

Bcrypt 能用于 API 认证吗?

可以,但 bcrypt 比 HMAC 方法慢。对速度敏感的 API 认证可考虑使用 HMAC-SHA256。将 bcrypt 保留用于数据库密码存储和用户认证流程。

Bcrypt 抵抗 GPU 攻击吗?

Bcrypt 的设计天然抵抗 GPU 加速,因为它需要大量内存且初始化阶段复杂。与 SHA-256(GPU 每秒可计算数百万次)不同,bcrypt 的结构使其在 GPU 上并不比 CPU 快多少:这是一大安全优势。

超过 72 字节的密码会怎样?

Bcrypt 会静默截断至前 72 字节,超出部分被忽略。解决方法是先用 SHA-256 对密码预哈希再使用 bcrypt,或使用 Argon2id 等没有此限制的现代算法。

新项目应该用 bcrypt 还是 Argon2id?

两者都是优秀选择。Argon2id 是密码哈希竞赛(2015)的胜出者,被认为是现代标准。Bcrypt 支持广泛,在旧系统中更容易找到。新项目推荐 Argon2id,最大兼容性选用经过验证的 bcrypt。

我忘了密码,手里只有 bcrypt 哈希,还能找回来吗?

不能,bcrypt 在设计上就是单向的。不存在解密,任何工具(在线或离线)都无法把哈希还原成原始密码。唯一能做的是拿候选密码逐个试:弱密码可能被字典攻击撞出来,强密码实际上无法恢复。用户忘记密码就重置,然后存储新哈希。

用在线 bcrypt 工具处理真实密码,安全吗?

就本页面而言,安全:哈希计算完全在浏览器本地完成,不向网络发送任何数据,可以用浏览器开发者工具的网络面板自行确认。不过生产系统的密码应该在你自己服务器的代码里用维护中的库来哈希,不要在没有检查过的网站里粘贴真实用户密码。

同一个密码每次生成的哈希都不一样,是工具出错了吗?

不是,这正是 bcrypt 的正常行为。每次哈希都会嵌入随机生成的 22 字符盐值,盐值不同输出就不同。验证仍然能通过,因为验证模式会从哈希本身读取盐值和成本因子。如果同一密码生成的两个哈希完全一样,那才是 bug:说明盐值没有随机性。

验证提示不匹配,但密码明明是对的,怎么排查?

按清单排查:确认复制了完整哈希(包括 $2b$ 前缀,截断的哈希必然失败);确认版本一致:旧系统的 $2a$ 哈希可以正常验证,$2y$ 前缀可能需要先规范化;检查粘贴时是否带了多余空格或尾部换行。还要确认成本因子:任何值都能验证,只是 14+ 会更慢。仍然失败的话,重新生成一个哈希再验证。