我在理解盐对密码的用途方面遇到了一些麻烦。 我的理解是,主要用途是阻止彩虹桌的攻击。 然而,我所看到的实现这些方法似乎并不能真正使问题变得更困难。 我看过很多教程,build议使用盐作为以下内容: $hash = md5($salt.$password) 原因是哈希现在不是映射到原始密码,而是密码和盐的组合。 但是要说$salt=foo和$password=bar和$hash=3858f62230ac3c915f300c664312c63f 。 现在有人用彩虹表可以颠倒散列,并提出input“foobar”。 然后他们可以尝试密码的所有组合(f,fo,foo,… oobar,obar,bar,ar,ar)。 获取密码可能需要几毫秒,但其他的不多。 我见过的其他用途是在我的linux系统上。 在/ etc / shadow中,散列密码实际上是与 salt一起存储的。 例如,“foo”的盐和“bar”的密码将哈希到: $1$foo$te5SBM.7C25fFDu6bIRbX1 。 如果黑客以某种方式能够得到这个文件,我不知道盐的用途是什么,因为te5SBM.7C25fFDu6bIRbX的反向散列已知包含“foo”。 感谢任何人都可以摆脱这一点。 编辑 :感谢您的帮助。 总结一下,我的理解是,盐使得哈希密码更加复杂,从而使其不太可能存在于预先计算好的彩虹表中。 之前我误解的是,我假设所有哈希表都存在彩虹表。