这是加密算法(MD5、SHA1 等)的常见问题。这些算法的安全问题通常来自对它们是什么以及它们如何工作的误解。在本文中,我们将特别关注MD5算法以及它是否可以解密。
作为一般规则,MD5 算法是不可逆的,就像大多数散列函数一样。它将一组无限的值散列到 32 个十六进制字符的固定摘要中。由于多个条目可以具有相同的 MD5 值,因此没有对其进行解密的算法方法。
说 MD5 算法不可逆并不意味着它是完美的哈希函数,并且无法猜测原始值,我们将在本文中看到。
MD5 是可逆的吗?
如果您正在阅读本文,您可能需要快速了解 MD5 算法的工作原理。因此,在查看问题的解决方案之前,让我们从这个开始。
MD5 算法的工作原理
MD5 加密
MD5 算法是一个散列函数。这意味着它会为它接受的任何输入生成一个 32 个十六进制字符串。您可以将密码、段落或整个百科全书转换为相同长度的 MD5 哈希。
例如,将 MD5 函数应用于单词“MD5Online”,结果为“d49019c7a78cdaac54250ac56d0eda8a”。
关于MD5解密的神话
现在众所周知,MD5 算法有很多弱点,而且像 MD5Online 这样的在线网站非常适合从 MD5 哈希中获取原始密码。
但这并不意味着 MD5 算法是可逆的,或者我们可以解密任何哈希。
我们仍然可以使用一些技术,我们将在下一部分中看到。
我们可以使用的 MD5 算法的弱点之一是它总是对同一个词给出相同的结果。
所以,我们现在知道“d49019c7a78cdaac54250ac56d0eda8a”是“MD5Online”的MD5哈希。
为什么 MD5 哈希函数不可逆
作为散列函数的结果,两个 MD5 条目可以具有相同的 MD5 散列。在这种情况下,即使使用数据库,也无法知道哪个是原始字符串。这就是为什么我们不能说 MD5 哈希函数是可逆的。
如果您想了解 MD5 算法中的一些碰撞示例,您可以阅读这篇文章,我将对此进行更深入的讨论。一些研究人员已经用字符串和文件证明了这个概念。因此,即使 MD5 哈希值相同,也不能保证原始条目相同。
有没有办法解密MD5?
总的来说,没有最终的解决方案可以 100% 地解密 MD5 哈希。但是像蛮力和数据库这样的技术在对抗用 MD5 算法散列的短词时取得了很好的成功率。
使用数据库解密 MD5 哈希
我之前已经介绍了 MD5 数据库背后的想法。因为任何输入字符串将始终提供与 MD5 算法的结果相同的哈希值。我们可以预编译一个单词或字符串列表,并将它们的 MD5 等效项存储在数据库中。
然后,我们可以针对 MD5 哈希列表使用此数据库,并尝试使用它来解密某些值。
这是一个简短的例子:
a:0cc175b9c0f1b6a831c399e269772661 b:92eb5ffee6ae2fec3ad71c777531578f c:4a8a08f09d37b73795649038408b5f33 d:8277e0910d750195b448797616e091ad
您可以存储许多这样的单词。您可以按顺序(a….z、aa..zz 等)或通过散列常用词和密码来创建数据库。
表格越大,您就越有可能找到任何 MD5 哈希的单词。
您可以将它与基本搜索功能一起使用,具体取决于您用于创建和存储值的技术。
对 MD5 哈希使用蛮力
第二种解决方案是对 MD5 哈希使用蛮力。在这种情况下,我们不会在数据库中存储任何内容。
MD5 函数足够快,可以动态生成散列并将它们与我们要解密的散列进行比较。
通过使用功能强大的计算机,可以非常快速地找到基本单词。
使用在线服务破解 MD5 哈希值
显然,以前的技术主要用于教育目的。建立一个庞大的数据库需要大量的时间和资源,用蛮力获得像样的结果也将是一笔巨大的投资。