MD5-Hash aus einer Datei in C abrufen: Eine Schritt-für-Schritt-Anleitung
In C wird der MD5-Hash einer Datei berechnet eine entscheidende Aufgabe für die Überprüfung der Datenintegrität und die sichere Übertragung. Um diesen Prozess zu vereinfachen, tauchen wir in eine praktische Implementierung ein.
Schritt 1: Link zur OpenSSL-Bibliothek
Für diese Implementierung benötigen Sie die OpenSSL-Bibliothek, die stellt den MD5-Hash-Algorithmus bereit. Verwenden Sie beim Kompilieren die folgende Zeile:
gcc md5.c -o md5 -lssl
Schritt 2: Definieren Sie den MD5-Hash
Deklarieren Sie ein Array zum Speichern des MD5-Hashwerts:
unsigned char result[MD5_DIGEST_LENGTH];
Schritt 3: Öffnen Sie die Datei und holen Sie sie sich Größe
int file_descript = open(argv[1], O_RDONLY); unsigned long file_size = get_size_by_fd(file_descript);
Schritt 4: Ordnen Sie die Datei dem Speicher zu
Um große Dateien effizient zu verarbeiten, ordnen Sie den Dateiinhalt mit mmap() dem Speicher zu:
file_buffer = mmap(0, file_size, PROT_READ, MAP_SHARED, file_descript, 0);
Schritt 5: Berechnen Sie den MD5 Hash
Verwenden Sie die MD5()-Funktion, um den Hash-Wert des zugeordneten Dateipuffers zu berechnen:
MD5((unsigned char*) file_buffer, file_size, result);
Schritt 6: Drucken Sie den MD5-Hash
Zeigen Sie den berechneten MD5-Hash als Hexadezimalzahl an Ziffern:
print_md5_sum(result); printf(" %s\n", argv[1]);
Vollständiger Codeausschnitt:
#include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/md5.h> unsigned char result[MD5_DIGEST_LENGTH]; void print_md5_sum(unsigned char* md){ ... } unsigned long get_size_by_fd(int fd){ ... } int main(int argc, char *argv[]){ ... }
Dieser Code bietet Ihnen eine umfassende Implementierung zur Berechnung des MD5-Hashs von Dateien in C .
Das obige ist der detaillierte Inhalt vonWie berechne ich den MD5-Hash einer Datei in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!