Получение предупреждения об обесценивании в OpenSSL

Это простая программа, которая генерирует дайджест MD5 файла и сравнивает его с предопределенным дайджестом MD5 в программе, а также проверяет его целостность.

#include<stdio.h>    
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include <openssl/md5.h>

char * calculate_file_md5(const char *filename) 
{
unsigned char c[MD5_DIGEST_LENGTH];
int i;
MD5_CTX mdContext;
int bytes;
unsigned char data[1024];
char *filemd5 = (char*) malloc(33 *sizeof(char));

FILE *inFile = fopen (filename, "rb");
if (inFile == NULL) {
    perror(filename);
    return 0;
}

MD5_Init (&mdContext);

while ((bytes = fread (data, 1, 1024, inFile)) != 0)

MD5_Update (&mdContext, data, bytes);

MD5_Final (c,&mdContext);

for(i = 0; i < MD5_DIGEST_LENGTH; i++) {
    sprintf(&filemd5[i*2], "%02x", (unsigned int)c[i]);
}

printf("calculated md5:%s ", filemd5);
printf (" %s\n", filename);
fclose (inFile);
return filemd5;
}

int main(int argc, char **argv) {
char * predefined_md5 = "8e2745d333daa9666a8bbebcd32a39bb";
char *new_md5 = calculate_file_md5("backup.json");

    if (!strcmp(predefined_md5, new_md5)) {
            printf("md5 matched\n");
    } else {
            printf("md5 not matched\n");
    }
free(new_md5);
return 0;
}

Программа скомпилирована и работает изящно, но может ли кто-нибудь сказать мне, чтобы отсортировать следующие предупреждения

GenerateMD5Hash.c: In function ‘calculate_file_md5’:
GenerateMD5Hash.c:18:9: warning: ‘MD5_Init’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
18 |         MD5_Init (&mdContext);
   |         ^~~~~~~~
In file included from headers.h:5,
             from GenerateMD5Hash.c:1:
/usr/include/openssl/md5.h:49:27: note: declared here
49 | OSSL_DEPRECATEDIN_3_0 int MD5_Init(MD5_CTX *c);
   |                           ^~~~~~~~
GenerateMD5Hash.c:22:9: warning: ‘MD5_Update’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
22 |         MD5_Update (&mdContext, data, bytes);
   |         ^~~~~~~~~~
In file included from headers.h:5,
             from GenerateMD5Hash.c:1:
/usr/include/openssl/md5.h:50:27: note: declared here
50 | OSSL_DEPRECATEDIN_3_0 int MD5_Update(MD5_CTX *c, const void *data, size_t len);
   |                           ^~~~~~~~~~
GenerateMD5Hash.c:24:9: warning: ‘MD5_Final’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
24 |         MD5_Final (c,&mdContext);
   |         ^~~~~~~~~
In file included from headers.h:5,
             from GenerateMD5Hash.c:1:
/usr/include/openssl/md5.h:51:27: note: declared here
51 | OSSL_DEPRECATEDIN_3_0 int MD5_Final(unsigned char *md, MD5_CTX *c);

с помощью ОС Ubuntu Mate команда, используемая для компиляции gcc GenerateMD5Hash.c -lcrypto -o GenerateMD5Hash

🤔 А знаете ли вы, что...
C обеспечивает высокую производительность и эффективность программ, что делает его выбором для встраиваемых систем и микроконтроллеров.


1
75
1

Ответ:

Решено

Из OpenSSL:

Следующие функции устарели, начиная с OpenSSL 3.0, и можно полностью скрыть, определив OPENSSL_API_COMPAT с подходящим значение версии, см. openssl_user_macros(7):

unsigned char *MD5(const unsigned char *d, unsigned long n, unsigned char *md);

int MD5_Init(MD5_CTX *c);
int MD5_Update(MD5_CTX *c, const void *data, unsigned long len);
int MD5_Final(unsigned char *md, MD5_CTX *c);

Все функции, описанные на этой странице, устарели. Вместо этого приложения должны использовать

EVP_DigestInit_ex(3), 
EVP_DigestUpdate(3) and 
EVP_DigestFinal_ex(3). 

Они там для обратной совместимости. Если вы хотите игнорировать предупреждения, вы можете:

  1. Просто игнорируйте их.
  2. Перенаправьте вывод на /dev/null.
  3. Вместо этого используйте функции, которые они рекомендуют.