for-lops如何在C ++示例中完全正常工作:计算哈希值

时间:2014-09-11 10:18:18

标签: c++ hash sha execution-time sha512

我试图找出我可以在哪个时间计算出多少哈希值。我使用的是SHA-512(带有512位输出的SHA-2)。我没有编写这个Hashfunction的代码,但我做了一个foor循环来测试它。我并不熟悉C ++,所以我不知道为什么会出现以下情况。

当我执行程序时,计算时间越来越长。虽然我在前几秒钟就有大约10000个哈希,但是几个小时之后我花了大约一分钟来计算1000个哈希......有人可以告诉我为什么以及如何解决"此?

这是相关的代码,我想:

int fortschritt = 0;
int prozent = 0;
string temp;
stringstream convert;
string loeschen;

for (int i = 1; i <= 4294967295; i++)
{
    convert << i;
    temp = convert.str();

    loeschen = sha512(temp);

    if (((int)(i/1000)) > fortschritt)
    {
        fortschritt = (int)(i/1000);

        if (((int)(i*100)/4294967295) > prozent)
        {
            prozent = ((int)(i*100)/4294967295);
        }

        cout << fortschritt*1000 << " von 4294967295 - " << prozent << " %" << endl;
    }
}

输出如下:

1000 von 4294967295 - 0 %
2000 von 4294967295 - 0 %
3000 von 4294967295 - 0 %
4000 von 4294967295 - 0 %
5000 von 4294967295 - 0 %
6000 von 4294967295 - 0 %
7000 von 4294967295 - 0 %
8000 von 4294967295 - 0 %
9000 von 4294967295 - 0 %
10000 von 4294967295 - 0 %
[...]

我认为这与我使用变量的方式有关,但我不确定,也不知道如何正确地做到这一点。 请原谅我这是一个愚蠢的问题,但现在困扰我一段时间了。

提前感谢您的任何帮助:)

约翰

1 个答案:

答案 0 :(得分:3)

看起来您的convert流每次迭代都会不断增长,每次都会附加新值。最简单的解决方法是在for循环中移动stringstream convert;的声明,以便每次都创建一个新声明。

进一步的优化肯定是可能的,因为在主循环中进行大量迭代时,将数字转换为字符串的效率并不高。