[1364]bcrypt用法--密码哈希 文章目录 安装与准备 密码哈希生成✅ 密码验证⚙️ 进阶用法与注意事项bcrypt是 Python 中用于安全存储密码的哈希库基于 Blowfish 算法具备加盐Salt和可调工作因子Work Factor特性能有效抵御彩虹表和暴力破解攻击。注意它是单向哈希不可解密。Python 的bcrypt库是专门用于密码哈希的它的核心用法就是生成哈希和验证密码用起来并不复杂。下面我把它的主要用法和注意事项整理了一下。 安装与准备首先用 pip 安装 bcrypt 库pipinstallbcrypt使用时需要注意密码和盐值都需要是字节bytes类型不是普通的字符串。通常用.encode(utf-8)转换。 密码哈希生成1. 生成盐值盐值是一串随机字符用来和密码混合防止彩虹表攻击。使用gensalt()函数生成可以指定rounds参数来控制计算强度默认12推荐12-14。importbcrypt# 生成一个默认强度的盐值 (rounds12)saltbcrypt.gensalt()# 生成一个强度更高 (rounds14) 的盐值salt_high_costbcrypt.gensalt(rounds14)2. 生成哈希使用hashpw()函数将密码和盐值作为参数传入得到一个完整的、包含盐值的哈希值。passwordbmy_secret_passwordsaltbcrypt.gensalt()# 生成哈希值可以安全地存入数据库hashed_passwordbcrypt.hashpw(password,salt)print(hashed_password)# 输出类似: b$2b$12$lQ.....注意生成的哈希值里已经包含了盐值和版本等信息不需要单独存储盐值。✅ 密码验证验证时使用checkpw()函数传入用户输入的明文密码和之前存储的哈希值。它会自动从哈希值中提取盐值重新计算并比对。# 模拟从数据库读取的哈希值stored_hashb$2b$12$lQ.....# 用户登录时输入的密码user_input_passwordbmy_secret_password# 验证返回 True 或 Falseis_correctbcrypt.checkpw(user_input_password,stored_hash)ifis_correct:print(密码正确)else:print(密码错误)⚙️ 进阶用法与注意事项调整工作因子 (rounds)rounds参数控制哈希计算迭代次数2^rounds次值越大越安全但计算耗时也越长。你需要根据服务器性能来平衡。# 示例使用 rounds14saltbcrypt.gensalt(rounds14)密码长度限制bcrypt 内部只处理密码的前72 个字节超出的部分会被忽略。为了安全最好在业务层对密码长度做出限制例如在前端和后端都限制在 72 个字符以内并给出清晰提示。密钥派生 (kdf)除了常规的密码哈希bcrypt 还提供了一个kdf()函数可以从密码生成固定长度的加密密钥用于其他加密场景。使用场景比较特定。用于生成加密密钥非密码哈希需指定固定盐值。keybcrypt.kdf(passwordbsecret,saltbfixed_salt_16bytes!,desired_key_bytes32,rounds100)版本前缀推荐使用2b前缀gensalt(prefixb2b)避免旧版2a潜在漏洞。