Holen Sie sich den MD5-Hash einer Datei in C++
MD5 ist ein kryptografisches Protokoll, das früher zur Verschlüsselung verwendet wurde, jetzt aber häufig zur Authentifizierung verwendet wird. Es basiert auf dem Hashing-Prozess in der hash
-Funktion, die einen verschlüsselten Hash-Wert gegen einen Klartext generiert.
Was ist die hash
-Funktion
Das Verständnis der hash
-Funktion ist wichtig, bevor Sie den MD5 (Message-Digest-Algorithmus) erkunden. Hashing ist der hash
-Funktionsprozess, der verwendet wird, um Klartext in einen verschlüsselten Text mit dem Hash-Wert umzuwandeln.
Es basiert auf einer mathematischen Funktion, die hilft, Klartext in Chiffretext und im Allgemeinen einen komprimierten Hashwert umzuwandeln.
Dieses Diagramm demonstriert die Funktionsweise der hash
-Funktion; Wir stellen eine grundlegende Nachricht bereit, dass die Nachricht eine Eingabe für die hash
-Funktion ist. Es führt einige Prozesse aus und gibt uns die Ausgabe als verschlüsselten Zufallswert, der als Chiffretext bekannt ist.
Merkmale der hash
-Funktion
- Die Ausgabe hat immer die gleiche Länge, 128 Bit, unabhängig von der Größe des Klartextes.
- Es komprimiert die ursprüngliche Nachricht, auch wenn sie mehr als 128 Bits hat.
- Es verdaut die Daten (Nachricht) und stellt die Daten in einer kleineren Hash-Wert-Darstellung dar.
- Hash-Werte sollten für jede unterschiedliche Nachricht eindeutig sein.
- Der Hashwert sollte für dieselbe Nachricht immer gleich sein.
Was ist MD5
Der MD5 (Message-Digest-Algorithmus) ist ein kryptografisches Protokoll, das zur Authentifizierung einer Nachricht, Inhaltsprüfung und digitalen Signaturen verwendet wird; Ronald Rivest entwarf es [1991](https://en.wikipedia.org/wiki/MD5#:~:text=Ronald Rivest in-,1991 to,-replace an earlier) als erweiterte Version von MD4. Es basiert auf der hash
-Funktion, um die gesendeten und empfangenen Dateien zu überprüfen.
MD5 wird jetzt zur Datenauthentifizierung verwendet, aber ursprünglich wurde es zur Datenverschlüsselung verwendet. Die Authentifizierung ist eine der Kerneigenschaften der Verschlüsselung, die uns bei der Authentifizierung und dem Erreichen der Datenintegrität hilft.
MD5 ist ein effizienter Algorithmus für die Authentizität von Passwörtern oder die Überprüfung der Originalität einer Datei, da er nach und nach die Hash-Werte von Dateien oder Passwörtern prüft.
Es gibt 4 herausragende Schritte des MD5-Algorithmus:
- Füllbits
- Länge anhängen
- MB-Puffer initialisieren
- Verarbeiten Sie jeden Block
Füllbits
Unsere anfängliche Nachricht kann jede Größe haben, 4000 Bit, 1231 Bit oder jede andere Anzahl von Bits; dann fügen wir einige Füllbits hinzu. Schließlich müssen Sie sicherstellen, dass die Größe von 64 Bit ein Vielfaches von 512 ist.
Wir fügen am Anfang eine 1 hinzu und die restlichen Nullen als Auffüllung.
Länge anhängen
In diesem Schritt müssen Sie ein paar weitere Zeichen hinzufügen, um Ihre letzte Nachricht zu einem Vielfachen von 512 zu machen. Nehmen Sie dazu die Länge der ursprünglichen Nachricht und drücken Sie sie in Form von 64 Bit aus.
Und diese Kombination gibt uns die endgültige Nachricht, welcher Messwert gehasht werden soll.
MB-Puffer initialisieren
Es ist Zeit, die Puffer A
, B
, C
und D
zu initialisieren; Jeder Puffer wird verwendet, um die Werte für den Nachrichtenauszug zu berechnen. Jeder Puffer hat 32 Bit und wird wie folgt initialisiert:
A = 01 23 45 67
B = 89 ab cd ef
C = fe dc ba 98
D = 76 54 32 10
Verarbeiten Sie jeden Block
Jeder 512-Bit-Block wird in weitere kleine Stücke von 16 Blöcken aufgeteilt; die Größe jedes Unterblocks beträgt 32 Bit. Insgesamt verarbeiten vier Runden jeden Block und führen einige spezifische Operationen durch.
Jede Runde verwendet alle 16 Blöcke, und die Puffer sind konstante Array-Werte.
Das konstante Array wird als T[1] -> T[64]
bezeichnet, und alle Unterblöcke werden als M[0] -> m[15]
bezeichnet.
Anhand dieses Diagramms können Sie sehen, dass die Werte für jeden einzelnen Puffer ausgeführt werden.
void print_MD5(unsigned char* md, long size = MD5_DIGEST_LENGTH) {
for (int i = 0; i < size; i++) {
cout << hex << setw(2) << setfill('0') << (int)md[i];
}
}
Diese Funktion wird verwendet, um MD
korrekt zu drucken.
#include <iostream>
#include "md5.h" // This is an external library that you need to import for MD5 algorithm
using namespace std; // for cout
int main() {
cout << "md5 of 'grape' : " << md5("grape") << endl;
return 0;
}
Ausgang:
md5 of 'grape' : b781cbb29054db12f88f08c6e161c199
Dieser Code enthält eine externe Bibliothek, md5.h
, mit der Sie den MD5-Algorithmus verwenden und Hash-Werte aus Klartext generieren können. Wir übergeben einen String grape
als Argument an die Funktion md5
, die den Hash-Wert der Datei zurückgibt.
fileSize = file.tellg();
cout << "File size \t" << fileSize << endl;
memBlock = new char[fileSize];
file.seekg(0, ios::beg);
file.read(memBlock, fileSize);
file.close();
Holen Sie sich die Dateigröße und kopieren Sie sie in den Speicher.
Abschluss
Der MD5-Hash-Algorithmus basiert auf einer komplexen mathematischen Formel für den Cipher-Hash-Wert aus dem Klartext. Wie wir bei der Arbeitsweise des MD5-Algorithmus gesehen haben, wandelt er den Klartext in einen Block bestimmter Größe um und führt verschiedene Operationen daran durch.
Und am Ende erhalten wir einen komprimierten 128-Bit-Wert gegen den Text. Der Hashwert des MD5-Algorithmus für das Alphabet a
sieht aus wie 0cc175b9c0f1b6a831c399e269772661
.
Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn