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