Manchmal benötigt man den MD5 Hash einer Datei um sie eindeutig zu Identifizieren, dieser Code sollte helfen es mit den .NET Framework zu realisieren.
Getestet habe ich das ganze mit Delphi 2005 und .NET Framework v1.1.
Benötigte Namespace:
Delphi-Quellcode:
System.Security.Cryptography
System.IO
FileStream erstellen:
FILE_PATH enthält den Pfad zu eurer Datei zB 'c:/download.dat'
myFileStream := FileStream.Create(FILE_PATH, FileMode.Open, FileAccess.Read, FileShare.None);
MD5CryptoServiceProvider erstellen, diese Enthält Methoden für das erzeugen von Hashes
myMD5CryptoServiceProvider := MD5CryptoServiceProvider.Create;
Der Methode ComputeHash den FileStream übergeben, ComputeHash liefert ein Byte Array zurück
Buffer := myMD5CryptoServiceProvider.ComputeHash(myFileStream);
Ressourcen freigeben
Delphi-Quellcode:
myMD5CryptoServiceProvider.Clear;
myFileStream.Close;
Das Byte Array in die 32 stellige Hexadezimal Schreibweise konvertieren zB '4679E94E07F9A61F42B3D7F50CAE0AEF'
Delphi-Quellcode:
while i < (Buffer AS &Array).Length do
begin
MD5Str := MD5Str + Buffer[i].ToString('x2');
inc(i);
end;
MD5Str := MD5Str.ToUpper;
MD5Str enthält nun den MD5 Hash.
So das wars eigentlich
Nachtrag: Test mit 700MB grosser File durchgeführt, Resultat ist das man übers
FCL sehr schnell Hashen kann, beim Test bin ich auf 25sek gekommen. Für die gleiche File brauchte DAMN_Hash_Calculator_v1_5_1.exe bei mir knappe 60sek. Die selbe File noch mit
md5.pas unter Delphi6 hat mehrere Minuten gedauert.