cpp使用相同的输入返回不同的输出

时间:2018-10-01 23:34:23

标签: c++

我用cpp创建一个sha256演示,并想重复100000次。

但是每次使用相同的输入我都会得到不同的输出。我的代码有什么问题?

对不起,我是cpp的新手。

这是我的代码:

void hash_cout(string msg)
{
    vector<unsigned long> block;
    block = convert_to_binary(msg);
    block = pad_to_512bits(block);
    block = resize_block(block);
    string hash = compute_hash(block);
    cout << hash << endl;
}

int main(int argc, char *argv[]) 
{
    const string message = "abcd";
    for (int i = 0; i < 100000; i++) 
    {
        hash_cout(message);
    }
    return 0;
 }

输出:

b8863664fd63dc2f92a0858ff7059d4b4c247bd883491c1dffc84380ea320183 1d18c6dd6cd175bee1e6285ffc2ed8d2ca1c582f9818d8ffe4ef539d89e69631 d982784be169c31fe0677ecf5dc03611b9c8602c29eeac3ab71bcc0488f4dabf 888766e7fb731adfefef38ba0287b54e103b61b850a75dd106db16db1c20a25c 054a5efb4e9e67d1ebf9714bf304f78a1df3d3df79d6a793bbf1ac3e90b8af79

我从https://gist.github.com/hak8or/8794351那里学到了cpp sha256代码

2 个答案:

答案 0 :(得分:0)

摘自gist.github上发布的代码OP:

string compute_hash(const vector<unsigned long> block)
{

    ...


    unsigned long static H0 = 0x6a09e667;
    unsigned long static H1 = 0xbb67ae85;
    unsigned long static H2 = 0x3c6ef372;
    unsigned long static H3 = 0xa54ff53a;
    unsigned long static H4 = 0x510e527f;
    unsigned long static H5 = 0x9b05688c;
    unsigned long static H6 = 0x1f83d9ab;
    unsigned long static H7 = 0x5be0cd19;

    ...

    H0 = ...

}

带有静态说明符的变量具有静态存储持续时间,在程序启动时分配,在程序结束时释放,它们仅初始化一次并在每次函数调用时保留其值。从这些行中删除static说明符后,您的代码将不再为同一输入产生不同的结果。

可通过onlinedbg获得实时版本。

答案 1 :(得分:0)

您正在使用compute_hash()的库函数具有静态变量H0至H7。每次调用compute_hash()函数时,静态变量都会更新。

您将需要创建另一个函数init_hash()来重置那些静态变量。您正在使用的实现几乎没有需要解决的问题。