首页/安全/加密与证书速查/口令加盐(Salt)
加密算法基础95 条

口令加盐(Salt)

为每个口令生成唯一随机值并随散列存储,使相同口令得到不同散列,抵御彩虹表与批量比对;盐不是密钥,无需保密但要唯一。

加密与证书速查安全更新于 2026-10-12
长度建议至少 16 字节随机
存储与散列一起保存(常嵌入散列字符串)
作用抵御彩虹表、隐藏相同口令
与 pepper 区别pepper 是额外秘密,与散列分开保管

生成与使用

生成与使用
import os, hashlib, base64
salt = os.urandom(16)
dk = hashlib.pbkdf2_hmac('sha256', b'password', salt, 600000)
print(base64.b64encode(salt).decode(), base64.b64encode(dk).decode())
固定盐、全局共享盐或短盐(如 4 字节)会让彩虹表重新有效;每次改密都要生成新盐。

易错点

  • 盐要和散列一起存储且格式明确,混用 base64/hex 编码会导致校验失败
  • 给盐加 pepper 是可选项,但 pepper 丢失意味着全部口令无法校验,需有备份与轮换流程

数据来源与参考

  • OWASP Password Storage Cheat Sheet
  • RFC 8018 §4.1(盐的用途)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌