【发布时间】:2021-03-18 05:11:10
【问题描述】:
目前这是我所拥有的:
for (int a = number; a < 255; a++)
{
for (int b = 0; b < 255; b++)
{
for (int c = 0; c < 255; c++)
{
for (int d = 0; d < 255; d++)
{
string ip = String.Concat(a, '.', b, '.', c, '.', d);
string _id = TruncateLongString(Hash(ip), 20);
if (_id == "AE18D602C836D7EAD1F8")
{
Console.WriteLine(ip);
Thread.Sleep(3600000);
}
}
}
}
}
但这很慢,而且需要绝对的时间。有没有其他方法可以做到这一点,最好是以更快的方式?此外,其原因是破解 sha1 哈希,我和另一个人试图弄清楚一个人如何在大约三秒内破解一个 ip 的哈希 (_id)。仅供参考,哈希也有一种盐,这是众所周知的。另外,如果您想知道,number 是我给线程使用的数字,从 1 上升到大约 40。此外,我们不知道该人使用什么编码语言,但我们猜测 c# 的速度,因为我们知道一些,但可能有更快的东西。
【问题讨论】:
-
第一个想法是使用
StringBuilder连接a+b+c+d,或字符串插值。您可以使用Stopwatch之类的东西检查什么更好...请记住,控制台写入也很慢...因此请尝试使用List<string>或HashSet将其排除在循环之外,这可能更好的是,例如您在最后加入,或者在您的情况下使用NewLine的简单字符串。你也可以试试IPAddressclass。 -
Console.WriteLine将是这里的引导项。而且这将产生大约 4.000.000.000 行。 -
两者都是瓶颈(字符串分配和
Console.WriteLine):参见,例如How come for loops in C# are so slow when concatenating strings?。 ——你真的不想这样做。也挺没用的。 -
我认为在合理的时间内不可能计算出 40 亿个哈希值,所以要么哈希值已经准备好,要么人们猜到了 :)
-
我认为1毫秒计算一百万个哈希是不可能的