我正在使用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
为什么两者不相等?
答案 0 :(得分:7)
echo
会附加换行符,因此您需要比较不同字符串的哈希值。请改用printf
:
$ printf 'A' | sha256sum
559aead08264d5795d3909718cdd05abd49572e84fe55590eef31a88a08fdffd -
$ printf 'A\n' | sha256sum
06f961b802bc46ee168555f066d28f4f0e9afdf3f88174c1ee6f9de004fc30a0 -
答案 1 :(得分:6)
在命令行中,您校验和A
+换行符。
如果你的unix版本支持它,请使用echo -n
回送而不添加换行符;
$ echo -n A | sha256sum
559aead08264d5795d3909718cdd05abd49572e84fe55590eef31a88a08fdffd -