【问题标题】:Generate an MD5 hash with six leading zeros生成带有六个前导零的 MD5 哈希
【发布时间】:2015-12-06 03:00:32
【问题描述】:

在 Advent of Code 中用 Java 做一些练习编码问题,遇到了一个问题,它要求我找到最小的六位整数,结合 iwrupvqb 的前导字符串,生成一个以五开头的 MD5 哈希零。

我使用 Apache DigestUtils.md5Hex 函数找到了这部分的答案,我只是强制通过 100000-999999 并将其与iwrupvqb结合,直到我得到一个以五个零开头的 MD5。

答案是 iwrupvqb346386 创建哈希:

0000045c5e2b3911eb937d9d8c574f09

现在它要求我找一个有六个前导零的。我一直在浏览 md5 算法如何工作、反转 MD5 等的页面和页面,但似乎无法以方程格式找出问题,这将帮助我确定如何根据使用的字符计算 MD5 .

我什至让这个循环运行了大约 30 分钟 - 一个小时,看看它是否有任何超出六位数整数的命中(因为显然没有任何与此文本短语结合产生六个前导零)

我对十六进制一无所知,所以在这一点上,我只是在黑暗中拍摄,并试图整晚猜测数字组合并不是我的事。除了练习之外,我不一定需要解决这个问题,但我很想知道更多关于这里发生的事情。 (是的,我知道 MD5 已被泄露,我永远不会在生产中使用它)

【问题讨论】:

  • 所以在这种情况下,我应该让我的循环向前运行,通过 iwrupvqb999999 直到得到答案?

标签: java md5


【解决方案1】:

这个问题只能通过暴力破解来解决。例如,这正是比特币中“工作量证明”的工作原理。加快速度的唯一方法是优化计算中的每一步。因此,比特币矿工已转向专用硬件。他们没有做任何“特殊”或“聪明”的事情,他们只是非常非常快地计算哈希值。

您只能优化代码并为其投入更多/更好的硬件。计算节点集群在这里也可以很好地工作,这个问题适合并行处理(同样是比特币矿池)。

如果你有一个多核 CPU,一个简单的事情就是每个 CPU 使用一个线程。应该线性加速(可能仍然不够快)。

【讨论】:

    【解决方案2】:

    我也在通过 Advent of Code 工作,但我使用的是 PowerShell。我解决了第 4 天的谜题 2,使用的代码与解决谜题 1 的代码基本相同。唯一的变化是 WHILE 条件检查六个前导零。运行的时间确实比解谜题 1 的时间要长得多。看到这篇文章后,我刚开始就开始睡觉了。当我醒来时得到了我的答案。我的代码发布在 Github。 Advent of Code Day 4 Puzzle 2 solution with PowerShell

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 2011-08-17
      相关资源
      最近更新 更多