为什么不能反转加密哈希?

时间:2011-07-06 22:33:41

标签: hash cryptography md5 cryptographic-hash-function reversing

为什么你不能像反转数学函数一样反转算法?如何制作一个不可逆的算法呢?

如果你使用彩虹表,是什么让使用盐不可能破解它?如果你用蛮力制作彩虹表来生成它,那么它就会发明每个明文值(到一个长度),最终会包含每个可能密码的盐和每个可能的盐(盐和密码/文本会只是作为一个单独的文本聚集在一起。)

5 个答案:

答案 0 :(得分:44)

答案 1 :(得分:20)

考虑从1到9999的2个数字。添加它们。现在告诉我最后的数字。

根据这些信息,我不能推断出你最初想到的数字。这是单向散列的一个非常简单的例子。

现在,我可以想出两个给出相同结果的数字,这就是这个简单示例与“正确”加密哈希(如MD5或SHA1)不同的地方。使用这些算法,在计算上很难想出一个产生特定散列的输入。

答案 2 :(得分:3)

无法反转哈希函数的一个重要原因是数据丢失。

考虑一个简单的示例函数:'OR'。如果将其应用于输入数据1和0,则会产生1.但现在,如果您知道答案为“1”,那么如何退出原始数据?你不能。它可能是1,1或者可能是0.1,或者可能是1.0。

关于盐渍和彩虹表。是的,从理论上讲,你可以拥有一个彩虹表,它可以包含所有可能的盐和密码,但实际上,它太大了。如果您尝试了小写字母,大写字母,数字和十二个标点符号的每种可能组合,最多50个字符长,即(26 + 26 + 10 + 12)^ 50 = 2.9 x 10 ^ 93种不同的可能性。这比可见宇宙中的原子数多。

彩虹表背后的想法是提前计算一堆可能的密码的哈希值,并且密码远小于50个字符,因此可以这样做。这就是为什么你要在前面添加一个盐:如果你将'57sjflk43380h4ljs9flj4ay'添加到密码的前面。虽然有人可能已经为“pa55w0rd”计算了哈希值,但是没有人会计算出'57sjflk43380h4ljs9flj4aypa55w0rd'的哈希值。

答案 3 :(得分:1)

我认为md5不会给你全部结果 - 所以你不能倒退找到md5-ed的原始内容

答案 4 :(得分:1)

md5是128位,即3.4 * 10 ^ 38种组合。

八个字符长度密码的总数:

  • 仅小写字符和数字:36 ^ 8 = 2.8 * 10 ^ 12
  • 低和大写和数字:62 ^ 8 = 2.18 * 10 ^ 14

您必须为密码存储8个字节,为md5值存储16个字节,即每个条目总共24个字节。

因此您的彩虹桌需要大约67000G或5200000G存储空间。 实际上可以找出密码的唯一原因是人们使用明显的密码。