# Bcrypt 生成器

使用随机的 16 字节盐值和 4 到 12 的成本因子创建 bcrypt 密码哈希。此工具会返回以 $2a$ 开头的标准模块化加密字符串，PHP password_verify、Node.js bcrypt、Spring Security 和大多数框架都能接受。可用它为测试用户生成初始数据、在数据库中重置管理员密码，或检查自己的哈希代码。密码绝不会被回显或存储。

## 常见问题

### 什么是 bcrypt？

Bcrypt 是一种源自 1999、基于 Blowfish 密码算法的密码哈希函数。它将随机盐值与可调成本结合，因此成本每增加一级，攻击者针对每次猜测所需的工作量就会翻倍。它仍是广受支持的密码存储方案。

### 输出字符串代表什么？

像 $2a$10$ 后跟 53 个字符这样的哈希，包含版本 2a、成本 10、22 个字符的盐值和 31 个字符的哈希，全部使用 bcrypt 自己的 Base64 字符集。请存储整个字符串，因为验证器会从中读取盐值和成本。

### 应该选择哪个成本因子？

此工具允许设置 4 到 12 的成本，默认值为 10，这是常见的框架默认值。每提高一级，耗时就会翻倍，因此成本为 12 时，耗时约为成本为 10 时的四倍。在生产环境中，应选择服务器能承受的最高成本，使耗时大致控制在 100 到 250 毫秒之间。

### 为什么成本上限是 12？

更高的成本会使每次哈希耗时数秒，导致单个请求长时间占用服务器。对于大多数应用，成本 12 已经足够强；如有需要，你可以在自己的环境中使用更高成本重新计算哈希。

### 为什么同一个密码每次生成的哈希都不同？

此工具会为每次哈希生成新的随机 16 字节盐值。不同盐值会生成不同字符串，但都能通过同一个密码验证。这样可以防止攻击者使用预计算表。

### 密码长度有限制吗？

有限制。Bcrypt 只使用密码的前 72 字节，因此此工具会拒绝更长的密码，而不会悄悄忽略多余部分。非 ASCII 字符在 UTF-8 中各占多个字节。

### PHP 或 Laravel 能接受 $2a$ 哈希吗？

能。PHP password_verify、Laravel、Symfony 以及使用 password_hash 的 WordPress 插件都能接受 $2a$、$2b$ 和 $2y$ 哈希；这些版本之间只有历史上的错误修复差异。Node.js bcrypt、bcryptjs、Python bcrypt 和 Spring Security 也接受 $2a$。

### 我的密码会被存储或记录吗？

不会。密码仅用于在请求期间计算哈希。它会从响应中移除，也绝不会写入日志或存储。

### 我应该使用 bcrypt 还是 Argon2？

OWASP 目前更推荐 Argon2id，因为它需要大量内存，会增加 GPU 攻击的成本。bcrypt 仍然是可接受的选择，而且有非常广泛的库支持，因此在无法使用 Argon2 时，它是可靠的选择。

### 如何检查密码是否与 bcrypt 哈希匹配？

使用本网站的 Bcrypt Verifier，或调用你所用框架的 verify 函数。切勿直接比较 bcrypt 字符串，因为同一密码的新哈希看起来总是不同。

在这里投放广告？

[给我们发邮件](mailto:hi@dennn.is?subject=%E5%9C%A8%20OneClick%20Pro%20%E4%B8%8A%E6%8A%95%E6%94%BE%E5%B9%BF%E5%91%8A)

[广告 适用于 WordPress 的智能体就绪型插件套件。](https://sleekwp.com/?ref=oneclickpro)
