所以我试图解决这个问题。我应该通过哈希函数获取哈希的电子邮件地址。
秘密电子邮件地址在下面散列:
092b41aa59dacb2124f5a04464bcd13297f6a09d69e6eabf1be7bef3ef86402d1b023677b38763b3cfae5c3ba71ba6cfe38526cf77e267373be8be893b1939af897c87302750d35f175f9664896ff78d9969ce2a72c3f1b5c439b7a952c557c2097332ecc01f50b12593826ba0872d24cd3c21dca4e1859a97ca4394b2544ef53df1f35cbb68b6a1e526df4e669920ba18c5c845aaee2f9d5b0b2c72b15d2296f0a42e4e37042713855c4cb84ca738bcbc151c84fe6448fca60efb64393c8b974d6ae3ab53c0cecdb11fc8a0e0e8864218ba49cb972bd76759290caf3a1851ca30cfbc46ff3137b342a28a159d9a483576e1ed3840f2d287b8cf74fafe2269cf7716d553f11eccce6fcd1b9e411789d989d97a2d95b4ac0aa6e92b512b923fa13e85ce24a5ee8527656b43a4f9b3817c9f67aa18966d70bc10e07ca19dd0cf6af5ca15876ee1d21d3afc8ba1524c6239a77184c0a84557c672230a38f41c8a1166425785a37cc2ac841d32c5558b38cd5c38c53551c5002815c71a4c4c4420fb945dc02cbb80e1c99b6b73c3d03318af914a26f7b760c299e3748f930febb97d7f8333ba0c29732ebdbe7ef9a181d7747986a7b6040a6b1165084a477f14643b首先,我们生成了一系列带有长度的字符串前缀 增加2.例如,如果我们的秘密电子邮件地址是 helloworld@company.com,我们会产生:
他是地狱
hellow
hellowor
... helloworld@company.com然后,对于每个前缀s,我们计算了以下哈希J:md5(md5(e) + s + md5(s))[其中+是字符串连接运算符,e是您的电子邮件地址]。最后,我们将所有哈希字符串J连接到 形成上面的长哈希!
例如,对于helloworld@company.com,我们会计算:
md5(md5('myemail@gmail.com')+'他'+ md5('他'))+
md5(md5('myemail@gmail.com')+'hell'+ md5('hell'))+
md5(md5('myemail@gmail.com')+'hellow'+ md5('hellow'))+
...为简单起见,您可以仅假设我们的电子邮件地址 包含字母数字字符和这4个字符:_。@ +
我不熟悉这类问题。如果你能给我一个粗略的想法,我应该做什么(一个游戏计划),这将是非常有帮助的。可以安全地假设我对哈希(或相关数据结构)知之甚少。这个问题对我来说是学习这些东西的好机会。
答案 0 :(得分:1)
只要知道e,你就可以很容易地发生碰撞,这很可能是原来的......
md5有128位输出...所以将你的长字符串分成单独的md5十六进制字符串
现在如果e已知,你需要猜测的第一个哈希值是2个字符...穷举搜索总共[a-z0-9 _。@ +] ^ 2 = 40 ^ 2 = 1600可能候选人......
一旦发生碰撞,你就会知道"秘密的前2个字符......
对于下一个哈希,你需要猜测的是接下来的2个字符,因为前两个字符已经从第1步中知道了......
按照大字符串J中出现的顺序重复所有哈希值...因为你只需要猜测每个哈希值2个字符,并且可以重用前面哈希的找到碰撞中的信息,这很容易...... < / p>
就复杂性而言,e的md5哈希值只需要计算一次,每次猜测你有2次连接和2次md5计算...每个哈希你有一个1600的exassetive搜索候选池,所以你平均一下可以说在J
中每个哈希需要800个猜测请记住,这不是解密...它仍然是搜索碰撞...但很可能它将是原始数据,因为md5很可能(一个人几乎可以说是肯定会说)对于可能的输入是无冲突的......