我不太明白盐对密码的作用。据我所知,它的主要用途是阻止彩虹桌的攻击。然而,我所看到的实现这一点的方法似乎并没有真正使问题变得更难。
我看过很多教程,建议盐可以这样使用:
$hash = md5($salt.$password)
原因是哈希现在映射的不是原来的密码,而是密码和盐的组合。但是说$salt=foo
和$password=bar
和$hash=3858f62230ac3c915f300c664312c63f
。现在有一张彩虹表的人可以反向哈希,得到输入“foobar”。然后他们可以尝试所有的密码组合(f, fo, foo,…)Oobar, obar, bar, ar)获取密码可能还需要几毫秒的时间,但仅此而已。
我看到的另一种用法是在我的linux系统上。在/etc/shadow中,散列密码实际上存储在与 the salt中。例如,salt为“foo”,password为“bar”将哈希为:$1$foo$te5SBM.7C25fFDu6bIRbX1
。如果黑客以某种方式能够得到这个文件,我不知道盐的目的是什么,因为te5SBM.7C25fFDu6bIRbX
的反向哈希已知包含“foo”。
感谢大家对这件事的解释。
谢谢你的帮助。总结一下我的理解,salt使散列密码更加复杂,从而使它不太可能存在于预先计算的彩虹表中。我之前误解的是,我假设所有哈希表都存在一个彩虹表。