cpp 返回具有相同输入的不同输出
cpp return different output with same input
>我用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 代码
来自 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获得。
您使用的库函数 compute_hash(( 具有静态变量 H0 到 H7。每次调用 compute_hash(( 函数时,静态变量都会更新。
您将需要创建另一个表示 init_hash(( 的函数来重置这些静态变量。您正在使用的实现几乎没有需要解决的问题。
- 字符的输入/输出操作
- C++ 中文件输入输出中的长长 v/s int
- 要求用户输入C++输出文件名
- 在C++中重载输入/输出运算符
- 从用户获取输入/输出
- 如何选择waveIn/waveOut函数C++使用的输入/输出设备
- C++击球平均值程序使用输入/输出文件打印名称,平均值,最高/最低平均值时遇到麻烦
- 从 2 位输入输出 4 位数字年份
- 标准输入输出操作如何C++完成
- Windows 中应用程序的每秒输入/输出操作数
- 如何初始化可以设置为默认数组并将输入/输出作为数组的类函数?
- 输入/输出和类
- 使用 Octave GNU 访问输入/输出文件
- (C++)分解这个简单的输入/输出代码:
- TensorFlow模型:如何从原始爱好文件中识别输入/输出节点名称
- 干净取消在输入/输出调用中被阻止的 std::线程
- 将线程之间的标准输入/输出重定向
- 输入/输出异或字符串的 C++ 问题
- C++输入/输出错误
- C++输入输出