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

Comment calculer un hachage MD5 à partir d'un fichier en C ?

DDD
Libérer: 2024-11-12 14:50:02
original
772 Les gens l'ont consulté

How to Calculate an MD5 Hash from a File in C  ?

Calcul du hachage MD5 à partir de fichiers 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 :

  • Lire un fichier dans un tampon
  • Utiliser la fonction MD5 pour calculer le hachage
  • Imprimer le résultat sous forme de chiffres hexadécimaux

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal