【问题标题】:Why am I not getting the sha256 right?为什么我没有得到正确的 sha256?
【发布时间】:2013-08-19 15:16:30
【问题描述】:

我正在使用 crypto++ 库进行一些练习。我期待与从 shell 调用的 sha256sum 工具相同的输出。

// typedef unsigned char byte;
byte out[CryptoPP::SHA256::DIGESTSIZE];
byte in=65;  // 'A'
CryptoPP::SHA256().CalculateDigest(out, &in, 1);
for(int i=0; i < CryptoPP::SHA256::DIGESTSIZE; i++)
    std::cout << std::hex << (int)out[i];
std::cout << std::endl;

559aead08264d5795d399718cdd5abd49572e84fe55590eef31a88a08fdffd

$ echo A | sha256sum

06f961b802bc46ee168555f066d28f4f0e9afdf3f88174c1ee6f9de004fc30a0

为什么两者不相等?

【问题讨论】:

    标签: c++ hash stdout sha256 gnu-coreutils


    【解决方案1】:

    echo 附加一个换行符,因此您正在比较不同字符串的哈希值。请改用printf

    $ printf 'A' | sha256sum
    559aead08264d5795d3909718cdd05abd49572e84fe55590eef31a88a08fdffd  -
    $ printf 'A\n' | sha256sum
    06f961b802bc46ee168555f066d28f4f0e9afdf3f88174c1ee6f9de004fc30a0  - 
    

    【讨论】:

      【解决方案2】:

      在您的命令行中,您正在校验和 A + 一个换行符。

      如果你的unix版本支持,使用echo -n回显,不加换行;

      $ echo -n A | sha256sum
      559aead08264d5795d3909718cdd05abd49572e84fe55590eef31a88a08fdffd  -
      

      【讨论】:

        猜你喜欢
        • 2017-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-05
        • 2023-04-05
        相关资源
        最近更新 更多