Maison >développement back-end >C++ >Comment calculer le hachage MD5 d'un fichier en C ?

Comment calculer le hachage MD5 d'un fichier en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-27 07:19:08901parcourir

How to Calculate the MD5 Hash of a File using C  ?

Obtention du hachage MD5 d'un fichier en C

Pour déterminer le hachage MD5 d'un fichier, on peut utiliser les étapes suivantes :

Étape 1 : Établir le descripteur de fichier et déterminer le fichier Taille

À l'aide de la fonction open(), obtenez un descripteur de fichier pour le fichier cible. Ensuite, utilisez la fonction fstat() pour déterminer la taille du fichier.

Étape 2 : Mapper le fichier en mémoire

Utilisez la fonction mmap() pour mapper le fichier dans mémoire, offrant un accès en lecture seule. Ce mappage facilite l'accès direct au contenu du fichier.

Étape 3 : Calculer le hachage MD5

À l'aide de la bibliothèque OpenSSL, invoquez la fonction MD5() pour calculer le hachage MD5 du contenu du fichier.

Étape 4 : Démapper le fichier de Mémoire

Une fois le hachage MD5 calculé, utilisez la fonction munmap() pour démapper le fichier de la mémoire. Cette étape libère le mappage de fichiers.

Étape 5 : Imprimer le hachage MD5 avec le nom de fichier

Affichez le hachage MD5 calculé ainsi que le nom de fichier correspondant pour référence.

L'extrait de code C suivant illustre ce processus :

#include <openssl/md5.h>

void computeMD5(const char* filename) {
  // Establish file descriptor and determine file size
  int fd = open(filename, O_RDONLY);
  struct stat statbuf;
  fstat(fd, &statbuf);
  size_t file_size = statbuf.st_size;

  // Map file into memory
  char* file_buffer = (char*)mmap(0, file_size, PROT_READ, MAP_SHARED, fd, 0);

  // Compute MD5 hash
  unsigned char md5[MD5_DIGEST_LENGTH];
  MD5((unsigned char*)file_buffer, file_size, md5);

  // Unmap file from memory
  munmap(file_buffer, file_size);

  // Print MD5 hash with file name
  printf("MD5 hash of '%s': ", filename);
  for (int i = 0; i < MD5_DIGEST_LENGTH; i++) {
    printf("%02x", md5[i]);
  }
  printf("\n");
}

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn