Salt(盐值)
yaoye Lv5

Salt(盐值)

🔑 基本概念

  • 一段随机生成的字符串,与用户密码拼接后共同进行哈希计算。

🛡️ 核心作用

  1. 防止重复哈希 → 相同密码 + 不同 salt = 不同哈希值。
  2. 抵御彩虹表攻击 → 迫使攻击者为每个 salt 单独生成预计算表,成本剧增。
  3. 增加暴力破解难度 → 攻击者需针对每个用户单独破解。

⚙️ 工作原理

  • 注册流程
    1. 生成随机 salt。
    2. 计算 hash(salt + 密码)
    3. 存储 salt 和哈希值。
  • 登录验证
    1. 取出用户的 salt。
    2. 计算 hash(salt + 输入密码),与存储值比对。

🔍 关键特性

  • 随机性:每个用户唯一,不可预测(使用安全随机数生成器)。
  • 公开存储:无需保密,与哈希值共存于数据库。
  • 足够长度:通常 ≥16 字节,确保熵值充足。

⚠️ 最佳实践

  • 拒绝全局固定 salt → 每个用户独立 salt。
  • 优先使用慢哈希算法(如 bcrypt、Argon2)→ 增加单次哈希计算时间。
  • 强制密码复杂度 → 降低被暴力破解的概率。

📝 示例

  • 用户A密码 123456 + salt a1B3c → 哈希值 X1yZ...
  • 用户B密码 123456 + salt p9Q!k → 哈希值 LmN8...
    (相同密码,因 salt 不同,哈希结果完全不同)