Почему я не правильно понимаю sha256?

Я использую библиотеку crypto ++ для некоторых упражнений. Я ожидаю того же вывода, что и для инструмента 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

Решение

echo добавляет новую строку, поэтому вы сравниваете хэши разных строк. использование printf вместо:

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

Другие решения

В командной строке вы проверяете A + перевод строки.

Если ваша версия Unix поддерживает это, используйте echo -n эхо без добавления перевода строки;

$ echo -n A | sha256sum
559aead08264d5795d3909718cdd05abd49572e84fe55590eef31a88a08fdffd  -
6

По вопросам рекламы [email protected]