Maison >développement back-end >C++ >Comment calculer un hachage MD5 à partir d'un fichier en C ?
Obtenir le hachage MD5 d'un fichier en C est essentiel pour les contrôles de sécurité et d'intégrité des données. Dans cet article, nous explorerons une implémentation C simple qui peut calculer et afficher le hachage MD5 d'un fichier.
L'implémentation exploite la bibliothèque OpenSSL pour effectuer les calculs MD5. Il comprend des fonctions pour :
Le code commence par ouvrir le fichier spécifié et le mapper en mémoire à l'aide de mmap(). Cela permet à l'application de travailler avec le fichier comme tampon en mémoire, facilitant ainsi un calcul MD5 efficace. La fonction MD5() calcule ensuite le hachage et le stocke dans un tableau prédéfini.
Enfin, la fonction print_md5_sum() convertit le hachage MD5 en chiffres hexadécimaux et les imprime à côté du nom du fichier. Cela permet une vérification et une comparaison faciles de l'intégrité des fichiers.
Voici le code :
#include <openssl/md5.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> unsigned char result[MD5_DIGEST_LENGTH]; // Print the MD5 sum as hex-digits. void print_md5_sum(unsigned char *md) { int i; for (i = 0; i < MD5_DIGEST_LENGTH; i++) { printf("%02x", md[i]); } } // Get the size of the file by its file descriptor unsigned long get_size_by_fd(int fd) { struct stat statbuf; if (fstat(fd, &statbuf) < 0) exit(-1); return statbuf.st_size; } int main(int argc, char *argv[]) { int file_descript; unsigned long file_size; char *file_buffer; if (argc != 2) { printf("Must specify the file\n"); exit(-1); } printf("using file:\t%s\n", argv[1]); file_descript = open(argv[1], O_RDONLY); if (file_descript < 0) exit(-1); file_size = get_size_by_fd(file_descript); printf("file size:\t%lu\n", file_size); file_buffer = mmap(0, file_size, PROT_READ, MAP_SHARED, file_descript, 0); MD5((unsigned char *)file_buffer, file_size, result); munmap(file_buffer, file_size); print_md5_sum(result); printf(" %s\n", argv[1]); return 0; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!