Heim  >  Artikel  >  Backend-Entwicklung  >  Wie berechnet man einen MD5-Hash aus einer Datei in C?

Wie berechnet man einen MD5-Hash aus einer Datei in C?

DDD
DDDOriginal
2024-11-12 14:50:02697Durchsuche

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

Berechnen des MD5-Hashs aus Dateien in C

Das Abrufen des MD5-Hashs einer Datei in C ist für Datensicherheits- und Integritätsprüfungen von entscheidender Bedeutung. In diesem Artikel untersuchen wir eine einfache C-Implementierung, die den MD5-Hash einer Datei berechnen und anzeigen kann.

Die Implementierung nutzt die OpenSSL-Bibliothek, um die MD5-Berechnungen durchzuführen. Es enthält Funktionen für:

  • Einlesen einer Datei in einen Puffer
  • Verwenden der MD5-Funktion zum Berechnen des Hash
  • Ausdrucken des Ergebnisses als Hexadezimalziffern

Der Code öffnet zunächst die angegebene Datei und ordnet sie mithilfe von mmap() dem Speicher zu. Dadurch kann die Anwendung mit der Datei als Puffer im Speicher arbeiten, was eine effiziente MD5-Berechnung ermöglicht. Die Funktion MD5() berechnet dann den Hash und speichert ihn in einem vordefinierten Array.

Schließlich wandelt die Funktion print_md5_sum() den MD5-Hash in Hexadezimalziffern um und druckt sie zusammen mit dem Dateinamen aus. Dies ermöglicht eine einfache Überprüfung und einen Vergleich der Dateiintegrität.

Hier ist der 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;
}

Das obige ist der detaillierte Inhalt vonWie berechnet man einen MD5-Hash aus einer Datei in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn