pyca/bcrypt:Python 密码哈希的标准选择

做 Web 开发的人,基本都绕不过密码存储这个问题。明文存密码是红线,MD5 和 SHA 这类快速哈希算法也不适合,因为容易被暴力破解。bcrypt 是专门设计用来处理密码哈希的算法,计算成本高,能有效对抗暴力攻击。

pyca/bcrypt 是 Python 生态里使用最广泛的 bcrypt 实现之一,目前积累了 1,481 个 Star。这个项目由 Python 密码学领域的核心组织 pyca 维护,和 cryptography 库同属一个团队。

正文顶部截图

安装和使用都很直接

安装只需要一行命令:

pip install bcrypt

编译依赖也不复杂,Linux 上装好 build-essential 和 cargo 就能正常构建。Rust 编译器的最低版本要求是 1.74.0。

用法本身很简单。先导入库,调用 hashpw 生成哈希值,后续用 checkpw 做验证:

import bcrypt
password = b"super secret password"
hashed = bcrypt.hashpw(password, bcrypt.gensalt())

验证的时候同样直接:

if bcrypt.checkpw(password, hashed):
    print("It Matches!")

几个实用的功能点

这个库支持可调的工作量因子。默认 rounds 是 12,你可以根据安全需求和硬件性能自行调整。数值越大计算越慢,破解成本也就越高。

前缀兼容也做了处理。默认输出 2 b 2b 2b 前缀,同时也支持 2 a 2a 2a。3.0.0 版本后 2 y 2y 2y 前缀仍然可用,但已被标记为弃用。

从 4.0 版本开始,超过 72 字节的密码会直接抛出 ValueError,而不是像旧版本那样静默截断。如果你需要处理长密码,官方建议先用 SHA256 哈希再 base64 编码,然后传给 bcrypt。

KDF 功能也值得提一下。3.0.0 起提供了 kdf 函数,实现了 bcrypt_pbkdf,这是 OpenSSH 新私钥加密格式里用到的密钥派生算法。

README区域截图

运行环境和替代方案

这个库支持 Python 3.9 以上版本,包括 free-threaded 构建,也兼容 PyPy 3。

README 里还坦诚地提到,bcrypt 虽然仍是可接受的密码存储方案,但新项目应该优先考虑 argon2id 或 scrypt。这两个算法在抵抗 GPU 和 ASIC 攻击方面表现更好。pyca 团队也推荐了相应的 Python 库来实现这些替代方案。

安全漏洞的处理流程和 cryptography 项目保持一致,发现安全问题可以私下联系维护团队。

总结

pyca/bcrypt 是一个成熟、稳定、维护活跃的密码哈希库。如果你已经在用 bcrypt,这个项目是 Python 环境下的可靠选择。如果是新项目,建议对比 argon2id 和 scrypt 后再做决定。

项目是 Python 环境下的可靠选择。如果是新项目,建议对比 argon2id 和 scrypt 后再做决定。

更多推荐