在密码学中,**盐**是在密码被哈希之前添加的随机数据。这使得攻击者无法使用预先计算好的密码和相应哈希值的表格来从其哈希值中推导出密码。

密码绝不应该以明文形式存储,因为存在攻击者可能入侵存储密码的数据库的风险。通常,密码会被哈希,并且存储生成的哈希值。如果哈希函数是密码学安全的,那么即使攻击者可以访问存储的哈希值,他们也很难反向该函数。

为了从哈希值中推导出密码,攻击者可以在预先计算好的表格(也称为彩虹表)中查找与哈希值对应的密码,该表格将可能的密码映射到它们的哈希值。

密码 哈希
pa55w0rd 56965E2A...
abcdef BEF57EC7...
letmein 1C8BFE8F...

尽管这些表格可能非常大,但此类攻击可能有效,因为表格查找是一种快速操作。

在哈希之前向密码添加随机盐可以阻止这种攻击,因为哈希不是仅基于密码计算的,而是基于密码与盐的组合计算的。

与密码不同,盐不需要保密:它可以与服务器数据库中加盐和哈希后的密码一起存储。