密码学中,是在密码被散列之前添加的随机数据。这使得攻击者无法从散列值推导出密码,因为攻击者无法使用预先计算的密码和相应散列的表来推导密码。

密码不应以明文形式存储,因为攻击者可能会破解存储密码的数据库。通常,密码会被散列,然后存储散列的结果。如果散列函数是密码学安全的,那么即使攻击者可以访问存储的散列,也无法逆转这个函数。

为了从散列值推导出密码,攻击者可以在预先计算的表中查找与散列对应的密码(也称为彩虹表):

密码 散列
pa55w0rd 56965E2A...
abcdef BEF57EC7...
letmein 1C8BFE8F...

虽然这些表可能非常大,但这种攻击可能会成功,因为表查找是一种快速操作。

在对密码进行散列之前添加随机盐可以阻止这种攻击成功,因为散列不是仅基于密码计算的,而是基于密码与盐的组合计算的。

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