AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MD5-Prüfroutine für Delphi 10.2

Ein Thema von Harry Stahl · begonnen am 26. Nov 2017 · letzter Beitrag vom 29. Nov 2017
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#1

MD5-Prüfroutine für Delphi 10.2

  Alt 26. Nov 2017, 14:15
Kennt jemand von Euch eine (schnelle) Prüfroutine, die auch Dateien größer als 4GB verarbeitet, unter Delphi 10.2?

Habe bislang eine unit von Matthias Fichtner verwendet, die kann aber nur Dateien < 4GB (nutzt ein FileMapping), eine andere Variante hat zwar bislang unter XE7 funktioniert, geht aber unter Delphi 10.2 nicht.

Habe jetzt keine Lust großartige Ursachenforschung zu betreiben, wenn es etwas fertiges (gerne kostenlos) gibt, will ich das Rad hier nicht noch mal neu erfinden.
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: MD5-Prüfroutine für Delphi 10.2

  Alt 26. Nov 2017, 14:20
Entweder mit den Jedis
Delphi-Quellcode:
uses
 IdHashMessageDigest, IdHash;

function MD5File(const FileName: string): string;
var
 IdMD5: TIdHashMessageDigest5;
 FileStream: TFileStream;
begin
 // if not TFile.Exists(FileName) then
 // Exit;

 try
  IdMD5 := TIdHashMessageDigest5.Create;
  FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);

  try
   Result := Trim(AnsiLowerCase(IdMD5.HashStreamAsHex(FileStream)));
  finally
   FileStream.Free;
   IdMD5.Free;
  end;
 except
 end;
end;
Oder mit Wolfgang Ehrhardt Hash-Units
Nur bei letzterer Möglichkeit weiß ich nicht, wie man die Prüfsumme einer Datei erstellt.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.468 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: MD5-Prüfroutine für Delphi 10.2

  Alt 26. Nov 2017, 14:23
Entweder mit den Jedis

Delphi-Quellcode:
uses
 IdHashMessageDigest, IdHash;
Das ist aber indy, nicht Jedi.

@Harry: Wenn es schnell sein soll, ist aber CRC32 besser. Was ist der Zweck Deiner Prüfsumme?
Thomas Mueller
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: MD5-Prüfroutine für Delphi 10.2

  Alt 26. Nov 2017, 14:24
Indy. Meine ich doch. Habe mich geirrt.

Zitat:
@Harry: Wenn es schnell sein soll, ist aber CRC32 besser.
CRC32 können Wolfgang Ehrhardt Hash-Units auch.
Und die sind ja für Schnelligkeit bekannt.

Nur bei Verwendung der Units ist darauf zu achten, die Unit Hash umzubenennen. Der Fehler wurde doch angeblich von Embarcadero behoben. Denn wenn man Hash von Wolfgang Erhardt in den uses stehen hat, sucht der Compiler nach System.Hash.

Geändert von LTE5 (26. Nov 2017 um 14:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: MD5-Prüfroutine für Delphi 10.2

  Alt 26. Nov 2017, 14:50
Danke für die Antworten. Ich benötige die MD5-Funktionalität, um mit meinem Dateimanager z.B. aus dem Netz geladene Dateien zu testen, ob da mit dem Download alles funktioniert hat.

Habe die Indy-Lösung nun mal mit einer 5,3 GB großen Datei getestet (liegt auf einer Festplatte, die per 1GB-Netz verbunden ist), da hat es 4 Minuten gedauert, bis das (richtige) Ergebnis kam.
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: MD5-Prüfroutine für Delphi 10.2

  Alt 26. Nov 2017, 14:52
Zitat:
da hat es 4 Minuten gedauert, bis das (richtige) Ergebnis kam.
Ich habe keine Ahnung, ob das schnell ist oder nicht wenn man bedenkt 5,3 GB und im Netzwerk.

CRC32 ist für dein Vorhaben eher ungeeignet soweit ich weiß.

When is CRC more appropriate to use than MD5/SHA1?
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: MD5-Prüfroutine für Delphi 10.2

  Alt 26. Nov 2017, 15:11
Habe mal schnell ein Linux-Testprogramm gemacht (da mein Windows virtuell in Virtual-Box verwendet wird), da dauert das (immer noch Festplatte, aber kein Netz) ca. 1:10 Minuten. Damit kann ich leben... (alleine das Kopieren bzw. Lesen einer Datei in dieser Größe dauert mind. 30 Sekunden, da ist das denke ich schon recht schnell).

Also danke für den schnellen Tip!
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

AW: MD5-Prüfroutine für Delphi 10.2

  Alt 26. Nov 2017, 15:33
Du wärst noch schneller dran, wenn du Wolfgang Erhardts Units verwenden und einen Stream hashen würdest.

Hier für einen String. für einen Stream weiß ich nicht wie es funktioniert
Delphi-Quellcode:
function MD5(const s: UTF8String): string;
var
 Context: THashContext;
 Hash: TMD5Digest;
begin
 MD5Init(Context);
 MD5Update(Context, PAnsiChar(s), Length(s) * SizeOf(Byte));
 MD5Final(Context, Hash);
 Result := string(Mem_Util.HexStr(@Hash, SizeOf(Hash)));
end;
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: MD5-Prüfroutine für Delphi 10.2

  Alt 26. Nov 2017, 17:12
es gibt noch die DCP Sachen, die haben auch MD5 mit drin, sind open source und nicht so vollgeladen wie die Indy Komponenten.

Da geht es dann so :

Code:
uses DCPmd5;

function FileMD5(const AFileName: string): String;
var DCP_md51: TDCP_md5;
    aStream: TFileStream;
    Buffer: array[0..16383] of Byte;
    Read, i : Integer;
    HashDigest: array of byte;
begin
  DCP_md51 := TDCP_md5.Create(nil);
  DCP_md51.Init;
  aStream := TFileStream.Create(AFileName, fmOpenRead);
  Repeat
    Read := aStream.Read(Buffer, Sizeof(Buffer));
    DCP_md51.Update(Buffer, Read)
  Until Read <> Sizeof(Buffer);
  aStream.Free;
  SetLength(HashDigest, DCP_md51.HashSize div 8);
  DCP_md51.Final(HashDigest[0]); // Read the MD5
  Result := EmptyStr;
  for i := 0 to Length(HashDigest) - 1 Do // end convert into hex
    Result := Result + IntToHex(HashDigest[i], 2);
  DCP_md51.Free;
end;
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

AW: MD5-Prüfroutine für Delphi 10.2

  Alt 26. Nov 2017, 18:34
Um das zu kompletieren. Gibt es jemanden der eine funktionierende Implementierung (Datei / Stream hashen) mit den WE-Units fertig bekommt?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz