我觉得我应该评论一下这里作为回复发布的一些说法。
首先,速度确实是MD5尤其是SHA1的问题。我出于娱乐目的编写了自己的MD5暴力破解应用程序,仅使用我的CPU,我就可以轻松地将哈希与每秒约2亿个哈希进行比较。这种速度的主要原因是,对于大多数尝试,您可以绕过算法中64个步骤中的19个。对于更长的输入(> 16个字符),它将不适用,但我相信有一些方法可以解决这个问题。
如果您在线搜索,您会看到有人声称能够使用GPU每秒检查数十亿个哈希。我毫不怀疑,如今仅在一台计算机上就能达到每秒1000亿个哈希,而且只会越来越糟。这需要一个使用4个高端双GPU的巨型耗电机器,但这仍然是可能的。
以下解释了为什么每秒1000亿个哈希是个问题
假设大多数密码包含96个字符的选择。那么一个包含8个字符的密码将有96^8 = 7,213,895,789,840,000,000,000个组合。
以每秒1000亿的速度,则需要7,213,895,789,840,000,000,000 / 3600 = ~20小时才能计算出它实际的内容。请记住,您还需要添加1-7个字符的数字。如果您想针对单个用户,20小时不算多。
因此,本质上
较新的哈希算法之所以专门设计成不容易在GPU上实现,是有原因的。
哦,我看到有人提到了MD5和彩虹表。如果您阅读这里的数字,我希望您意识到彩虹表在MD5方面已经变得多么愚蠢和无用。除非MD5的输入非常大,否则您将无法与GPU竞争。到存储介质能够产生远远超过3TB/s的速度时,CPU和GPU的速度将达到更高的水平。
至于SHA1,我相信它比MD5慢约三分之一。我无法自己验证这一点,但根据MD5和SHA1的数字来看,情况似乎就是这样。速度问题在这里基本上也是一样的。
这里的寓意
请按照指示操作。永远不要再使用MD5和SHA1来哈希密码。我们都知道大多数人的密码不会那么长,这是一个主要缺点。添加长盐值肯定会有所帮助,但是除非您想添加数百字节的盐值,否则肯定会有快速的暴力破解应用程序可以反向工程您的密码或用户的密码。