You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:30:33