Это простая программа, которая генерирует дайджест 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 обеспечивает высокую производительность и эффективность программ, что делает его выбором для встраиваемых систем и микроконтроллеров.
Из 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).
Они там для обратной совместимости. Если вы хотите игнорировать предупреждения, вы можете:
/dev/null
.