2012-06-20 151 views
2

我最近看了一篇关于password hashing的文章。为什么MD5/SHA1密码哈希无法解密?

如何创建MD5或SHA1哈希以使其无法解密?我认为,它必须通过某些FORMULA来加密字符串(它总是给同一个字符串使用相同的散列;所以不能有随机化),这就是为什么我们应该能够用相同的FORMULA解密它?或者人们不知道论坛?

+0

由逆公式。我离密码学专家很远,但其思想是你有两个功能:可以在合理时间内计算的加密(明文)和解密(密文),这至少不能没有密钥。通常你可以做的最好的事情是通过加密函数运行所有的明文,直到你找到正确的。这需要指数时间,并由此导致方法的安全性。 –

+3

@PanayiotisKarabassis MD5和SHA1不是加密算法,不能解密。他们是哈希函数。您的评论有点误导。 – psych

+0

确实。对不起... –

回答

27

MD5和SHA1不是加密算法。他们是哈希算法。它是单向公式。对特定字符串运行MD5或SHA1会产生始终相同的散列。不可能将函数反转回原始字符串。

例如:

15国防部4 = 3

即使你知道公式是

在x mod 4

你不能推断x,因为它可能是3,7,11,15等...

显然,MD5和SHA1要复杂得多!

在上面的例子中,输入15总是会给你3的答案,但是没有人能够推导出原始数字。这不会导致很好的碰撞,其中多个输入字符串可以给相同的哈希:

http://en.wikipedia.org/wiki/MD5#Collision_vulnerabilities

维基百科所使用的特定算法的信息:

http://en.wikipedia.org/wiki/MD5#Algorithm

+0

好吧,那有道理... –

+0

谢谢!这是我正在寻找的那种例子! – Gabo

4

一切都是正确的斗志解释,我想补充一点:

15 Mod 4 = 3

即使你知道公式是

在x mod 4

你不能推断出X,因为它可能是3,7,11,15等

我们可以去连更接近我们的情况,并有行动的结果(如你有哈希值作为动作和动作描写的结果)

在x mod 4 = 3

x可以是12,13,14或15,它不会告诉我们输入了什么样的整数。

+0

但是用这个公式找到与输出相匹配的输入很简单。因此找到第一个原像很简单。密码散列的一个重要属性是,您无法找到与给定输出匹配的任何输入。 – CodesInChaos

0

我一直认为md5和sha1不能被解密,并在我的应用程序中使用。但令我惊讶的是,我发现了一些执行该程序的网站。 见http://www.crypt-security.com/ 因此,这个程序是不够安全的

+0

这是一个相当古老的问题,并没有真正回答这个问题......感谢您加入stackoverflow,我希望你坚持下去,找到有用的网站。 – jeremy

+1

MD5和SHA1不能被解密,因为它们不是加密算法。他们是哈希函数。虽然逆向工程并不容易,但没有任何东西可以阻止我查找MD5('password')= 5f4dcc3b5aa765d61d8327deb882cf99并将散列值存储在字典中,以便我可以执行查找来识别输入字符串是'password' 。 – psych

+1

还有很多其他方法可以确定这些常见散列函数的匹配情况,但“解密”这个词的使用是不正确和误导的。 – psych