gpt4 book ai didi

encryption - 从 MD5 哈希函数的特殊应用中恢复电子邮件地址

转载 作者:行者123 更新时间:2023-12-01 23:55:23 28 4
gpt4 key购买 nike

首先,我们将电子邮件地址分割成 2 个字符的字符串。
然后,对于每个段 s,我们计算以下哈希 J:

md5(md5(s) + s + md5(s))  [where + is the string concatenation operator].

最后,我们将所有哈希字符串 J 连接起来形成下面的长哈希。

例如:对于 helloworld@company.com 的输入,我们将计算:

md5(md5('he') + 'he' + md5('he')) +
md5(md5('ll') + 'll' + md5('ll')) +
md5(md5('ow') + 'ow' + md5('ow')) +
...

长哈希:

f894e71e1551d1833a977df952d0cc9de44a1f9669fbf97d51309a2c6574d5eaa746cdeb9ee1a5df
c771d280d33e5672bf024973657c99bf80cb242d493d5bacc771b3b0b422d5c13595cf3e73cfb1df
91caedee7a6c5f3ce2c283564a39c52d3306d60cbc0e3e33d7ed01e780acb1ccd9174cfea4704eb2
33b0f06e52f6d5aba5a5a89e6122dd55f8efcf024961c1003d116007775d60a0d5781d2e35d747b5
dece2e0e3d79d272e40c8c66555f5525

如何从哈希中恢复电子邮件地址?据我了解,“哈希”是一种单向函数。我只能将它与另一个哈希进行比较,看它们是否匹配或生成原始文本的哈希。

最佳答案

虽然从散列中提取原始消息是不切实际的一般可能是真的,但这显然看起来像是一个精心设计的条件练习,可以破解“加密” .


考虑将电子邮件地址分成两个字符的部分。如果您只使用小写字母(26 个字母 + 2 个符号,@.,则只有 28 * 28 = 784 可能的两个-字母组合。即使电子邮件有大小写字母和数字,也只有 64 * 64 = 4096 组合——完全在计算限制内。

要做的事情是预先计算一个rainbow table ,或搜索空间中所有可能的哈希值的表。你可以用矩阵来做到这一点:

 +----------------------------------+----------------------------------+----------------------------------------+-----------------------------+
| a | b | c | ... |
+----------------------------------+----------------------------------+----------------------------------------+-----------------------------+
a| md5(md5('aa') + 'aa' + m5('aa')) | md5(md5('ba') + 'ba' + m5('ba')) | md5(md5('ca') + 'ca' + m5('ca')) | ... |
+----------------------------------+----------------------------------+----------------------------------------+-----------------------------+
b| md5(md5('ab') + 'ab' + m5('ab')) | md5(md5('bb') + 'bb' + m5('bb')) | md5(md5('cb') + 'cb' + m5('cb')) | ... |
+----------------------------------+----------------------------------+----------------------------------------+-----------------------------+
c| md5(md5('ac') + 'ac' + m5('ac')) | md5(md5('bc') + 'bc' + m5('bc')) | md5(md5('cc') + 'cc' + m5('cc')) | ... |
+----------------------------------+----------------------------------+----------------------------------------+-----------------------------+
| ... | ... | ... | ... |
+----------------------------------+----------------------------------+----------------------------------------+-----------------------------+

但是你每次都必须遍历矩阵才能找到匹配项——很慢!

另一种方法是使用字典,键是散列,值是“解码”字母:

{ 
md5(md5('aa') + 'aa' + md5('aa')): 'aa',
md5(md5('ab') + 'ab' + md5('ab')): 'ab',
md5(md5('ac') + 'ac' + md5('ac')): 'ac',
...
}

无论哪种方式,您现在都将拥有所有可能的双字母组合的哈希值。现在您处理输入字符串。由于 MD5 生成 32 个字符长的散列,将输入分解为 32 个字符的字符串,并针对您的表执行查找:

'f894e71e1551d1833a977df952d0cc9d' => 'he'
'e44a1f9669fbf97d51309a2c6574d5ea' => 'll'
...

关于encryption - 从 MD5 哈希函数的特殊应用中恢复电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24004656/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com