编码解码哈希加密格式化时间转换开发生成文本处理网络工具其他工具
首页 / 名词解释 / 盐值

盐值

盐值(Salt)是在对密码等敏感数据做哈希之前,额外混入的一段随机字符串。哈希算法是确定性的——相同输入永远得到相同输出,这意味着两个使用同一密码的用户会存下完全相同的哈希,攻击者也能预先算好海量常见密码的哈希表(彩虹表)逐条比对。加盐就是把 hash(password) 改成 hash(salt + password),让每条记录的结果都各不相同。

正确用法是给每个用户单独生成一个足够随机的盐值(通常 16 字节以上),和哈希结果一起存进数据库。盐值不需要保密,明文存储即可——它的作用是"打散"而非"隐藏"。几个要点:

常见误区是以为"加了盐就安全了"。盐能挡住彩虹表和批量预计算,却挡不住针对单个账户的暴力或字典破解——要抵御这个,应改用 bcrypt、scrypt、Argon2 这类计算代价高的"慢哈希"(它们内置加盐)。此外别把盐和"胡椒"(pepper) 混淆:pepper 是全站共用且需要保密的密钥,通常不进数据库;盐则是公开、每条唯一的。

常见问题

盐值需要保密吗?
不需要。盐的目的是让每个哈希唯一、抵御彩虹表,与哈希值一起明文存储即可。真正需要保密的是 pepper(胡椒),那是另一个概念。
盐值和 pepper(胡椒)有什么区别?
盐是每条记录唯一、公开存储的随机值;pepper 是全站共享且需要保密的密钥,通常放在代码、配置或独立密钥服务里,不进数据库。两者可以叠加使用。
加了盐是不是就不用担心密码被破解了?
不是。盐只能防彩虹表和批量预计算,对单个账户的字典或暴力破解无效。要真正抗破解,得配合 bcrypt、scrypt、Argon2 这类计算代价高的慢哈希算法。

相关工具

相关名词