使用指定的哈希函数解密哈希后的电子邮件地址

Decrypt email address hashed using specified hashing function

本文关键字:哈希 解密 电子邮件地址 函数      更新时间:2023-09-26

所以我正在努力解决这个问题。我应该获得散列函数散列后的电子邮件地址。

秘密电子邮件地址如下所示:

092b41aa59dacb2124f5a04464bcd13297f6a009d69e6eabf1be7bef3ef86402d1b023677b38763b3cfae5c3ba71ba6cfe38526cf77e267373 be8be893b1939f897c87302750d35f175f9664896ff78d9969ce2a72c3f1b5c439b7a952c557c2097332ec01f50b12593826ba0872d24cd3c21dca4e1859a97ca4394b2544f53df35cbb68b6a1526df4e669920ba18c5c845aaee2f9 d5b0b2c72b15d2296f0a42e47042713855c4cb84ca738bcbc151c84fe6448fca60efb64393c8b974d6ae3ab53c0ecdb11fc8a0e8864218ba49cb972bd76759290caf31851ca30cfb46ff3137b342a28a159d9a483576e1ed3840f287b8cf74fafe2269cf7716d553f11ccce6fcd1b9e411789d97a2d95b4ac0a6e92b512b923fa13e85ce24ee85227656b43a4f9b3817c9f67aaa18966d70bc10e07ca19dd0f6a15876ee21d3afc8a1524c6239a77184c0a84557c672230a38 f41c8a1166425785a37cc2ac841d32c5558b38cd5c38c53551c5002815c71a4c4c420fb945dc02cbb80e1c99b6b73c3d03318af914a26f7b760c299e3748f930febbb97d7f8333b0c29732ebdbe7ef9a181d7747986a7b6040a6b1165084a477f14643b

首先,我们生成了一系列长度为的字符串前缀增加2。例如,如果我们的秘密电子邮件地址helloworld@company.com,我们会生成:

地狱
你好
好。。。helloworld@company.com

然后,对于每个前缀s,我们计算以下散列J:md5(md5(e)+s+md5(s))[其中+是字符串串联运算符,e是您的电子邮件地址]。最后,我们将所有散列字符串J连接到形成上面的长散列!

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

md5(md5('myemail@gmail.com')+'he'+md5('he'))+
md5(md5('myemail@gmail.com')+'hell'+md5('hell'))+
md5(md5('myemail@gmail.com')+你好+md5(你好)+

为了简单起见,您可以假设我们的电子邮件地址包含字母数字字符,这4个字符:_.@+


我不熟悉这种问题。如果你能给我一个大致的想法(一个游戏计划),那将是非常有帮助的。可以肯定的是,我对哈希(或相关的数据结构)了解不多。这个问题将是我学习这些东西的好机会。

只要e是已知的,就可以很容易地伪造碰撞,这很可能是原始的。。。

md5具有128位输出。。。所以把你的长字符串分成单独的md5十六进制字符串

现在,如果e是已知的,那么对于第一个散列,您只需要猜测2个字符。。。穷举搜索将是总共[a-z0-9_.@+]^2=40 ^2=1600个可能的候选者。。。

一旦发生冲突,您就会"知道"秘密的前2个字符。。。

对于下一个散列,您只需要猜测s的下两个字符,因为前两个字符在步骤1。。。

按照大字符串J中出现的顺序,对所有哈希重复此操作。。。由于每个哈希只需要猜测2个字符,并且可以重用上一个哈希的冲突信息,所以这很容易。。。

就复杂性而言,e的md5散列只需要计算一次,并且每个猜测有2个连接和2个md5计算。。。每个哈希你有一个1600的不可靠的搜索候选池,因此平均而言,你可以说你需要在J 中对每个哈希进行800次猜测

请记住,这不是谴责。。。它仍然在寻找碰撞。。。但最有可能的是原始数据,因为md5很可能(人们几乎可以肯定地说)对于可能的输入是无冲突的。。。