Salt(盐值)

Salt(盐值)
🔑 基本概念
- 一段随机生成的字符串,与用户密码拼接后共同进行哈希计算。
🛡️ 核心作用
- 防止重复哈希 → 相同密码 + 不同 salt = 不同哈希值。
- 抵御彩虹表攻击 → 迫使攻击者为每个 salt 单独生成预计算表,成本剧增。
- 增加暴力破解难度 → 攻击者需针对每个用户单独破解。
⚙️ 工作原理
- 注册流程:
- 生成随机 salt。
- 计算
hash(salt + 密码)
。 - 存储 salt 和哈希值。
- 登录验证:
- 取出用户的 salt。
- 计算
hash(salt + 输入密码)
,与存储值比对。
🔍 关键特性
- 随机性:每个用户唯一,不可预测(使用安全随机数生成器)。
- 公开存储:无需保密,与哈希值共存于数据库。
- 足够长度:通常 ≥16 字节,确保熵值充足。
⚠️ 最佳实践
- 拒绝全局固定 salt → 每个用户独立 salt。
- 优先使用慢哈希算法(如 bcrypt、Argon2)→ 增加单次哈希计算时间。
- 强制密码复杂度 → 降低被暴力破解的概率。
📝 示例
- 用户A密码
123456
+ salta1B3c
→ 哈希值X1yZ...
- 用户B密码
123456
+ saltp9Q!k
→ 哈希值LmN8...
(相同密码,因 salt 不同,哈希结果完全不同)