【发布时间】:2023-11-27 20:59:01
【问题描述】:
我有一个字符串的 MD5 哈希,存储为 String。我正在写一个小程序,通过蛮力找出原始字符串。
我想遍历char 的一个子集。
下面的代码适用于String.length() == 0。
我不知道如何编辑此代码以使用可变长度Strings。我觉得我在递归的正确轨道上,但不能再进一步了。
我有以下代码:
public void attempt(String initial, String md5) {
for (char c = ' '; c < '~'; ++c) {
attempt = initial + Character.toString(c);
generatedMd5 = generateMD5(attempt);
System.out.println(attempt);
if (hashesMatch(md5, generatedMd5)) {
break;
} else attempt(attempt, md5);
}
}
注意:我应该提到这是针对 MD5 的学术研究。
【问题讨论】:
-
如果这是您的实际代码而不是示例,您需要在其中添加深度检查(否则您只会生成充满空格的字符串,直到您用完堆栈)并且您需要返回匹配成功,并在您的尝试调用中对此进行测试,以便您在找到匹配项时真正停止。但是您可能想研究尽可能多地优化 MD5 函数,或者以某种方式在许多 CPU 或 GPU 上并行运行散列 - 这是迄今为止您最慢的一步。除了奇怪的简单情况,您永远找不到这样的匹配项 - 这将花费太长时间。
-
请修复您显示的源代码,它不完整。
-
我修正了第一段的措辞
-
首先运行一些关于您需要运行的 MD5 检查数量的计算。粗略估计 MD5 需要多长时间 -> 惊讶于您的计算需要多长时间。