【问题标题】:Decrypt email address hashed using specified hashing function解密使用指定散列函数散列的电子邮件地址
【发布时间】:2014-11-20 22:35:17
【问题描述】:

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

秘密电子邮件地址在下面散列:

092b41aa59dacb2124f5a04464bcd13297f6a09d69e6eabf1be7bef3ef86402d1b023677b38763b3cfae5c3ba71ba6cfe38526cf77e267373be8be893b1939af897c87302750d35f175f9664896ff78d9969ce2a72c3f1b5c439b7a952c557c2097332ecc01f50b12593826ba0872d24cd3c21dca4e1859a97ca4394b2544ef53df1f35cbb68b6a1e526df4e669920ba18c5c845aaee2f9d5b0b2c72b15d2296f0a42e4e37042713855c4cb84ca738bcbc151c84fe6448fca60efb64393c8b974d6ae3ab53c0cecdb11fc8a0e0e8864218ba49cb972bd76759290caf3a1851ca30cfbc46ff3137b342a28a159d9a483576e1ed3840f2d287b8cf74fafe2269cf7716d553f11eccce6fcd1b9e411789d989d97a2d95b4ac0aa6e92b512b923fa13e85ce24a5ee8527656b43a4f9b3817c9f67aa18966d70bc10e07ca19dd0cf6af5ca15876ee1d21d3afc8ba1524c6239a77184c0a84557c672230a38f41c8a1166425785a37cc2ac841d32c5558b38cd5c38c53551c5002815c71a4c4c4420fb945dc02cbb80e1c99b6b73c3d03318af914a26f7b760c299e3748f930febb97d7f8333ba0c29732ebdbe7ef9a181d7747986a7b6040a6b1165084a477f14643b P>

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

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

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

md5(md5('myemail@gmail.com') + '他' + md5('he')) +
md5(md5('myemail@gmail.com') + 'hell' + md5('hell')) +
md5(md5('myemail@gmail.com') + 'hellow' + md5('hellow')) +
...

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


我不熟悉这种问题。如果你能给我一个大概的想法,我应该做什么(一个游戏计划),那将有很大的帮助。可以安全地假设我对散列(或相关的数据结构)知之甚少。这个问题将是我学习这些东西的好机会。

【问题讨论】:

  • 要解密md5 吗? (如果我错了,请纠正我)
  • 从问题陈述来看,是这样的。我意识到 MD5 无法解密。 (哈希是一种方式)但由于有更多信息——比如生成长度增加 2 的字符串前缀,我的电子邮件地址——这可能是可能的。
  • 这个谜题是哪里来的?我很确定我已经在某处读过它。
  • 暴力破解MD5,步长为两个字符,这真的是面试时编造的问题不是吗?

标签: javascript encryption hash md5


【解决方案1】:

只要知道e,你就可以很容易地伪造一个碰撞,那很可能是原来的......

md5 有一个 128 位输出......所以将你的长字符串分成单独的 md5 十六进制字符串

现在如果 e 已知,您只需猜测第一个哈希值是 2 个字符 ... 穷举搜索将总共有 [a-z0-9_.@+]^2 = 40^2 = 1600 可能候选人...

一旦发生碰撞,您就会“知道”秘密的前 2 个字符 ...

对于下一个哈希,您只需要猜测 s 的下 2 个字符,因为前两个字符在步骤 1 中已经知道 ...

按照出现在大字符串 J 中的顺序重复所有散列 ... 因为您只需猜测每个散列的 2 个字符,并且可以重用从前一个散列的发现冲突中获得的信息,这相当容易 ...

就复杂性而言,e 的 md5 哈希只需要计算一次,每次猜测您有 2 次连接和 2 次 md5 计算...每个哈希您有一个 1600 的详尽搜索候选池,因此平均您可以说在 J 中每个哈希需要 800 次猜测

请记住,这不是解密...它仍然是在搜索碰撞...但很可能它将是原始数据,因为 md5 很可能(几乎可以肯定地说)对可能的输入无冲突...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 2014-03-30
    • 2018-09-21
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多