Когда я вычисляю sha256-дайджест файла с помощью командной строки openssl, он полностью отличается от дайджеста, сгенерированного в C++, с помощью библиотеки openssl.OpenSSL digest: разные результаты в командной строке и в C++
командной строки:
openssl dgst -binary -sha256 MyFile.txt
C++:
BIO* bio = BIO_new_file("MyFile.txt", "rb");
if (bio != NULL)
{
OpenSSL_add_all_digests();
const EVP_MD* md = EVP_sha256();
if (md != NULL)
{
EVP_MD_CTX* ctx = EVP_MD_CTX_create();
if (EVP_DigestInit_ex(ctx, md, NULL))
{
const int bufLength = 4096;
unsigned char buf[bufLength];
unsigned int len;
while (BIO_read(bio, buf, bufLength))
EVP_DigestUpdate(ctx, buf, bufLength);
unsigned char digest[EVP_MAX_MD_SIZE];
int ok = EVP_DigestFinal_ex(ctx, digest, &len); // ok == 1; digest in variable "digest" is totally different from the one calculated on command-line
}
EVP_MD_CTX_cleanup(ctx);
BIO_free_all(bio);
}
}
почему дайджеста с помощью C Расчетные ++ совершенно разные, чем вычисленного в командной строке? (MyFile.txt не имеет разрывов строк или пробелов в нем)
Уважения, Matthias
спасибо за ваш ответ, но это не сработало => readlen «всегда» 1 (кроме случаев, когда файл читается до конца) – Matthias
я также пытался прочитать файл с QT (QFile.readAll), там хеш также отличается от того, который рассчитан в командной строке – Matthias
Да, это работает. Вы скопировали стенографию while? Скобки важны. Когда я читаю свой тестовый файл, он читает 4096 байт 2 раза, а за последним чтением следует 1655 байт. И шестнадцатеричный хэш точно соответствует командной строке ssl hash. –