Python中bcrypt用指定字符串作盐报错及配置成本因子4的方法
解决bcrypt的"invalid salt"错误及添加成本因子
错误原因
bcrypt的salt必须是由bcrypt.gensalt()生成的符合特定格式的字节串,你直接使用账户名转码后的字符串作为salt,不符合bcrypt对salt的格式要求,因此触发"invalid salt"错误。
正确实现方案
如果你想结合数据库中的账户名字段生成哈希,正确的做法是将账户名与密码拼接后再进行哈希(而非把账户名当作salt),同时通过bcrypt.gensalt()生成带指定成本因子的salt:
import bcrypt # 示例数据 password = "password123" accountName = "james" # 将账户名与密码拼接,再转为字节串 combined_input = f"{accountName}{password}".encode('utf-8') # 生成成本因子为4的salt(cost参数指定成本因子,范围4-31) salt = bcrypt.gensalt(cost=4) # 执行哈希 pw_hash = bcrypt.hashpw(combined_input, salt) print(pw_hash)
关键说明
- 关于salt:永远不要手动自定义bcrypt的salt,必须使用
bcrypt.gensalt()生成,它会自动生成符合bcrypt标准的salt格式,包含成本因子等必要信息。 - 成本因子:
bcrypt.gensalt(cost=4)中的cost参数就是成本因子,值越高,哈希计算越慢,安全性也越高,bcrypt允许的范围是4到31。 - 结合账户名:如果需要基于账户名和密码共同生成哈希,直接将两者拼接后再哈希即可,这样相同密码不同账户名会生成不同的哈希值。
内容的提问来源于stack exchange,提问作者Abiodun Adeoye
相关产品推荐
相关产品推荐

