我有一个 MD5 哈希(例如“5d41402abc4b2a76b9719d911017c592”),我想找到另一个具有相同哈希的字符串。到目前为止,我已经创建了两种算法(一种在 Java 中,另一种在 C# 中),但它们运行速度非常慢。目前我每秒只能处理大约 100,000 个哈希值。我应该使用其他算法来加快速度吗?
这是我目前在 Java 中使用的算法的一个示例(我将原始散列存储在 originalHash 中,然后生成其他字符串的散列,这些字符串只是数字并比较散列):
import java.security.*;
import java.math.*;
public class b {
public static void main(String args[]) throws Exception{
String s="Hello";
MessageDigest m=MessageDigest.getInstance("MD5");
m.update(s.getBytes(),0,s.length());
String originalHash = new BigInteger(1,m.digest()).toString(16);
System.out.println("MD5: " + originalHash);
for (long i = 0; i < 9223372036854775807L; i++)
{
String iString = i + "";
m.update(iString.getBytes(),0,iString.length());
iString = new BigInteger(1,m.digest()).toString(16);
if (originalHash.equals(iString))
{
System.out.println("Found MD5: " + iString);
break;
}
if (i%1000000 == 0)
{
System.out.println("Count: " + (long)i/1000000 + "M");
System.out.println("Sample Hash: " + iString);
}
}
}
}