为什么MD5/SHA1密码哈希值无法解密?

7

我最近阅读了一篇关于密码哈希的文章。

MD5或SHA1哈希是如何创建的,以至于无法解密??我认为,它必须通过某种公式加密字符串(对于相同的字符串始终给出相同的哈希值;因此不能有随机性),这样我们就应该能够通过相同的公式解密它?还是人们不知道这个公式吗?


通过逆公式。我并不是密码学专家,但这个想法是你有两个函数:加密(明文),可以在合理的时间内计算出来,解密(密文)则不能,至少没有密钥就不能。通常你能做的最好的事情就是将所有明文通过加密函数运行,直到找到正确的一个。这需要指数时间,从而产生了该方法的安全性。 - Panayiotis Karabassis
5
MD5和SHA1不是加密算法,不能被解密。它们是散列函数。你的评论有点误导。 - infojolt
2个回答

40

MD5和SHA1不是加密算法,而是哈希算法。

它们是单向计算公式。对于一个特定字符串运行MD5或SHA1会得到一个始终相同的哈希值。不可能通过反向函数还原出原始字符串。

例如:

15模4等于3

即使你知道公式是

x模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


谢谢!这正是我在寻找的示例! - Gabo

4

Psych已经正确解释了一切,我想再补充一点:

15 Mod 4 = 3

即使你知道公式是

x Mod 4

你也无法推断出x,因为它可以是3、7、11、15等任何一个数。

我们可以更接近我们的情况,并获取操作结果(就像您有哈希作为操作结果和操作描述一样)

x mod 4 = 3

x可以是12、13、14或15,这并没有告诉我们输入的整数是多少。


但是使用那个公式很容易找到与输出匹配的输入。因此,很容易找到第一个前像。密码哈希的一个基本属性是你无法找到任何与给定输出匹配的输入。 - CodesInChaos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接