c++ - for-lops 如何在 C++ 示例 : calculating hashes 中准确工作

标签 c++ hash sha execution-time sha512

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

当我执行程序时,计算时间越来越长。虽然我在开始的几秒钟内有大约 10000 个哈希值,但几个小时后我的 PC 花了大约一分钟来计算 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 %
[...]

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

在此先感谢您的帮助:)

约翰

最佳答案

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

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

关于c++ - for-lops 如何在 C++ 示例 : calculating hashes 中准确工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25784871/

相关文章:

c++ - 内联汇编程序直接将 double 转换为 long long

php - 你能帮我理解盐散列函数吗?

string - 比较长字符串的哈希值

C++ 当前时间 -> 两位数

c++ - std::optional 参数是否创建拷贝?

android - 启用异常 C++

c++ - C++中的Java hashCode()等效项

linux - 同时对同一个文件应用不同的哈希算法

performance - SHA-1 附近具有碰撞可能性的快速散列函数

ruby - 在 Ruby 中将唯一的种子字符串转换为随机但确定的浮点值