Bcrypt 密码 生成器
在浏览器中即时生成安全的bcrypt密码哈希值。选择成本因子,客户端哈希 — 完全私密且免费。
在浏览器中即时生成安全的bcrypt密码哈希值。选择成本因子,客户端哈希 — 完全私密且免费。
bcrypt 是由 Niels Provos 和 David Mazières 于 1999 年设计的密码哈希函数,源自 Blowfish 密码。与 SHA-256 等通用哈希函数不同,bcrypt 故意缓慢(并且可以通过成本参数配置缓慢),这正是密码哈希器所需的属性。更快的哈希函数可以让攻击者每秒暴力破解更多候选者;较慢的速度会限制它们。
bcrypt 还自动合并每个密码的盐,消除基于预先计算的彩虹表的一整类攻击。 salt 和 cost 参数作为 bcrypt 输出的一部分存储,因此验证只需要存储的哈希值和候选密码 - 无需单独的 salt 管理。这种缓慢、盐分和独立格式的结合使得 bcrypt 成为二十年来的默认密码哈希,并且成为今天的一个强有力的选择。
现代替代方案是存在的。 Argon2 赢得了 2015 年密码哈希竞赛,除了时间硬度之外,还提供内存硬度。 scrypt 提供类似的属性。对于新设计,推荐选择 Argon2id。 bcrypt 仍然可以接受并广泛部署,特别是在 Argon2 不可用的环境中。
将密码存储为明文是一种不当行为。使用像 SHA-256 这样的快速哈希值来存储它们也好不了多少——现代 GPU 每秒计算数十亿次 SHA-256 哈希值,使得对任何常见密码的暴力攻击在数小时内变得可行。 bcrypt 故意缓慢的速度改变了经济性:在成本系数 12 下,攻击者为每个候选密码花费大约 250 毫秒,这使得暴力破解对于任何重要的密码都是不切实际的。
bcrypt 的自动每个密码盐也能抵御彩虹表攻击。具有相同密码的两个用户会产生不同的 bcrypt 哈希值,因为他们的盐不同。破坏密码数据库不会让攻击者快速识别常见密码或预先计算表的命中。
输入密码,选择成本,获取哈希值。
bcrypt 使用修改后的 Blowfish 密码的密钥设置阶段,重复 2^cost 次。成本因素是对数的 — 成本 12 是成本 11 的两倍,是成本 10 的四倍。这种对数缩放使管理员可以随着硬件的改进而逐渐提高成本,而无需重新设计系统。
输出格式为 $version$cost$saltAndHash,其中 saltAndHash 使用自定义字母表进行 Base64 编码。该版本通常是 $2b$ (修复了环绕错误的现代变体)或 $2y$ (特定于 PHP 的等效版本)。盐为16字节;哈希值是 24 字节;它们一起编码为 53 个字符的 custom-base64。
最大输入长度为 72 字节(Blowfish 密钥长度限制)。较长的密码会被悄悄截断,这是 bcrypt 的一个长期存在的怪癖。最佳实践是将密码长度限制为 72 个字节,或者使用 SHA-256 进行预哈希,以在 bcrypt 之前标准化长度。