
文章目录bcryptPython 密码哈希的标准做法1、这库是干嘛的2、安装需要什么3、怎么用4、兼容性与安全策略5、适合谁用bcryptPython 密码哈希的标准做法pyca/bcrypt 在 GitHub 上拿到 1,481 Star。这个库只做一件事给 Python 项目提供安全的密码哈希。它基于 bcrypt 算法实现是目前业界公认的密码存储方案之一。项目由 Python Cryptographic Authority 维护和知名的 cryptography 库同出一门安全策略也是同一套标准。1、这库是干嘛的密码明文存储是安全问题里最基础的一类也是最常见的一类。bcrypt 库把这件事变得很简单输入密码输出哈希值下次验证时拿明文和已有的哈希比对几行代码就搞定。它内部完整实现了 bcrypt 算法的核心逻辑包括随机盐生成、对数级可调工作因子、以及 OpenSSH 使用的 bcrypt_pbkdf 密钥派生函数。支持2 a 2a2a和2 b 2b2b前缀兼容大多数历史实现。3.0.0 之前的2 y 2y2y前缀依然能在 hashpw 里用但已经被标记为废弃。2、安装需要什么装起来不复杂一条 pip 命令pip install bcrypt但有个编译前提系统里得有 C 编译器和 Rust 编译器最低版本 1.74.0。Linux 上通常能满足不同发行版的依赖安装命令如下Debian / Ubuntusudo apt-get install build-essential cargoFedora / RHEL 系sudo yum install gcc cargoAlpineapk add --update musl-dev gcc cargoWindows 和 macOS 如果装的是预编译 wheel一般不需要自己编译开箱即用。3、怎么用密码哈希和验证的完整流程只有这几行importbcrypt passwordbsuper secret passwordhashedbcrypt.hashpw(password,bcrypt.gensalt())ifbcrypt.checkpw(password,hashed):print(It Matches!)工作因子默认是 12可以手动调高。数字越大单次哈希计算越慢暴力破解的成本也就越高hashedbcrypt.hashpw(password,bcrypt.gensalt(14))如果密码超过 72 字节会直接抛 ValueError。这是 3.0.0 之后的行为变更之前是静默截断。处理超长密码的常见做法是先做 SHA256再 base64 编码最后交给 bcrypt 处理importbase64,hashlib passwordban incredibly long password*10hashedbcrypt.hashpw(base64.b64encode(hashlib.sha256(password).digest()),bcrypt.gensalt())需要密钥派生的话3.0.0 之后新增了 kdf 函数实现的是 bcrypt_pbkdf。这个 KDF 被用在 OpenSSH 的新版加密私钥格式里keybcrypt.kdf(passwordbpassword,saltbsalt,desired_key_bytes32,rounds100)4、兼容性与安全策略支持 Python 3.9 及以上版本包括 free-threaded 构建也支持 PyPy 3。和旧版的 py-bcrypt 保持兼容可以平滑迁移。安全漏洞的处理方式和 cryptography 库一致发现安全问题需要私下联系维护者而不是直接公开提 issue。项目维护者的态度很实在bcrypt 目前依然是可接受的选择但如果有条件新项目可以考虑 argon2id 或 scrypt。bcrypt 的优势在于成熟度够高、生态够广、几乎所有主流语言和平台都有实现迁移成本最低。5、适合谁用在写 Web 后端、需要处理用户注册和登录密码的开发者在做命令行工具或本地脚本、需要密码保护的开发者在维护老项目、已经在用 bcrypt 需要替换 py-bcrypt 的开发者在用 OpenSSH 新版私钥格式、需要 bcrypt_pbkdf 支持的开发者地脚本、需要密码保护的开发者在维护老项目、已经在用 bcrypt 需要替换 py-bcrypt 的开发者在用 OpenSSH 新版私钥格式、需要 bcrypt_pbkdf 支持的开发者