【问题标题】:Keccak output wrongKeccak 输出错误
【发布时间】:2016-03-27 22:41:48
【问题描述】:

我正在尝试使用 this 官方库运行 Keccak 224。 不幸的是,我从函数中得到了错误的哈希值。 我怀疑这是图书馆的错,而是我做错了什么。

这就是我正在尝试的:

unsigned char input[] = "abc", output[168];
const unsigned long long int inputByteLen = sizeof(input);

FIPS202_SHA3_224(input, inputByteLen, output);

std::stringstream stream;
for (unsigned int i = 0; i < sizeof(output); i++) {
    stream << std::hex << static_cast<short>(output[i]);
}
cout << stream.str() << endl;

带有 SHA-3-224 (Keccak) 的“abc”的正确哈希应该是:

e642824c3f8cf24a d09234ee7d3c766f c9a3a5168d0c94ad 73b46fdf

但我只是从这种调用库的方式中得到废话。 我究竟做错了什么? 一个小例子会很好,它可以解释我如何达到预期的结果以及我做错了什么。

【问题讨论】:

  • 您要使用 Keccak 224 还是 SHA3 224?它们略有不同。
  • SHA3 224. 输出的哈希是否相互不同?
  • 是的,它们使用的常量略有不同。
  • 好的。我没有意识到这一点。你知道我的库是在计算输入字符串的 SHA3 还是 Keccak 吗?代码中都提到了两者,所以我不确定。无论如何,我得到的输出都不适合他们两个:/
  • 鉴于函数的名称,我假设它是 SHA3。 FIPS202 指定了最终版本。

标签: c++ sha-3 keccak


【解决方案1】:

你考虑到最后的空字符了吗?

const unsigned long long int inputByteLen = sizeof(input) - 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多