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