Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   MD5-Prüfroutine für Delphi 10.2 (https://www.delphipraxis.net/194472-md5-pruefroutine-fuer-delphi-10-2-a.html)

TiGü 27. Nov 2017 09:44

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

Zitat von Neutral General (Beitrag 1387233)
Zitat:

Zitat von TiGü (Beitrag 1387232)
Es geht hier nicht um Passwörter oder sowas!
[...] Wenn alles gut ist, dann ist die Datei korrekt runtergeladen.

Schon klar.
Aber auch bei Dateien lässt sich das ganze ausnutzen und der Benutzer bekommt eine Datei mit gleichem Hash aber
anderem (bösartigem) Inhalt. Ich will ja jetzt nicht zwangsweise den Teufel an die Wand malen.
Ich will nur sagen, dass man nichts zu verlieren und nur gewinnen kann wenn man sich für ein sichereres Hashverfahren entscheidet.
Und bei den meisten Hash-Bibliotheken reicht es den Klassennamen von TMD5Hash (o.ä.) auf TSHA3Hash (o.ä.) umzubenennen und man ist auf der sicheren Seite.

Da hat man aber 0,0 % was gewonnen, wenn du keinen Referenz-SHA3 hast zum Vergleichen.

Neutral General 27. Nov 2017 09:46

AW: MD5-Prüfroutine für Delphi 10.2
 
Ja okay. Wenn man nicht selbst die Downloads anbietet und der Anbieter nur einen MD5 Hash liefert dann nehme ich alles zurück.
Dann bringts einem natürlich nichts irgendeinen anderen Hash auszurechnen.

LTE5 27. Nov 2017 11:09

AW: MD5-Prüfroutine für Delphi 10.2
 
Mich haben, wenn ich ihn so nennen darf, Wolfgang's Units noch nie enttäuscht.
Sie arbeiten schnell, zuverlässig und bringen keinen unnötigen Müll mit.

LTE5 29. Nov 2017 01:03

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

Deine Lösung mag zwar schneller sein, aber selbst mit der simplen eingebauten Prozedur MD5File aus md5.pas Lösung mit max. 64 KB Buffer hat man keine wesentlichen Geschwindingkeitseinbußen:
Hier muss ich nur fragen, wie man MD5File verwendet? Es gibt ja keinen Rückgabewert.

gammatester 29. Nov 2017 08:43

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

Zitat von LTE5 (Beitrag 1387435)
Zitat:

Deine Lösung mag zwar schneller sein, aber selbst mit der simplen eingebauten Prozedur MD5File aus md5.pas Lösung mit max. 64 KB Buffer hat man keine wesentlichen Geschwindingkeitseinbußen:
Hier muss ich nur fragen, wie man MD5File verwendet? Es gibt ja keinen Rückgabewert.

Delphi-Quellcode:
procedure MD5File(const fname: Str255; var Digest: TMD5Digest; var buf; bsize: word; var Err: word);
{-MD5 of file, buf: buffer with at least bsize bytes}
Und als Kommentar in Hash.HashFile: {-Calculate hash digest of file, buf: buffer with at least bsize bytes}

Das Ergebnis Digest ist ein Var-Parameter! Außerdem hast Du noch einen Error-Code Err, falls ein Fehler auftritt.

Was willst Du mehr?

Edit: Hier das ganze als Komplett-Programm (diesmal mit 32KB-Puffer)
Delphi-Quellcode:
{$Apptype console}
uses
  hash, md5, mem_util;
const
  BSIZE = $8000;
var
  buf: array[0..BSIZE-1] of byte;
  Digest: TMD5Digest;
  Err: word;
begin
  if paramcount>0 then begin
    MD5File(paramstr(1),Digest, buf, sizeof(buf), Err);
    if Err<>0 then writeln('Error ', Err)
    else writeln('MD5 = ', HexStr(@Digest, sizeof(Digest)));
  end
  else writeln('Usage: MD5F <file>');
end.
und noch mal das 512MB-Testfile
Code:
D:\Work\CRC_HASH>timethis md5f.exe 512MB_A

TimeThis : Command Line : md5f.exe 512MB_A
TimeThis :   Start Time : Wed Nov 29 10:15:22 2017

MD5 = 31e4d9c6d74cd592b78f77f72965d6ab

TimeThis : Command Line : md5f.exe 512MB_A
TimeThis :   Start Time : Wed Nov 29 10:15:22 2017
TimeThis :     End Time : Wed Nov 29 10:15:24 2017
TimeThis : Elapsed Time : 00:00:02.610

LTE5 29. Nov 2017 11:28

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

Edit: Hier das ganze als Komplett-Programm (diesmal mit 32KB-Puffer)
Gibt es einen grund warum 32 statt 64 kb Buffer?
Ok ich sehe, kein Stream mehr.

Soweit ich das gerade sehe, kann MD5.MD5File aber nur Dateien mit einer maximalen Dateinamenlänge von 255 entgegennehmen.

gammatester 29. Nov 2017 11:44

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

Zitat von LTE5 (Beitrag 1387474)
Gibt es einen grund warum 32 statt 64 kb Buffer?

Um zu zeigen, daß kein wesentlicher Geschwindigkeitsverlust auftritt.
Zitat:

Soweit ich das gerade sehe, kann MD5.MD5File aber nur Dateien mit einer maximalen Dateinamenlänge von 255 entgegennehmen.
Richtig.

LTE5 29. Nov 2017 11:56

AW: MD5-Prüfroutine für Delphi 10.2
 
Hat das den alleinigen Grund MAX_PATH nicht zu übersteigen?
Das wäre doch mit \\?\ gelöst.

gammatester 29. Nov 2017 12:11

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

Zitat von LTE5 (Beitrag 1387477)
Hat das den alleinigen Grund MAX_PATH nicht zu übersteigen?
Das wäre doch mit \\?\ gelöst.

Das gibt es unter Linux oder Windows 98 gar nicht. Aber das ist auch nicht der Hauptgrund: Es sind Kompatibilität und Faulheit :wink:

Aber ich kann es gerne in die übernächste Version einbauen als
Delphi-Quellcode:
procedure HashFile({$ifdef CONST} const {$endif} fname: String; PHash: PHashDesc;
                    var Digest: THashDigest; var buf; bsize: word; var Err: word);
  {-Calculate hash digest of file, buf: buffer with at least bsize bytes}
Die nächste Version ist unterwegs (heute oder morgen je nach Ablenkung) und bringt wesentlich beschleunigte Blake2B- und Blake2S-Routinen, Blake2B für alle Compiler von TP5 bis Tokyo.

LTE5 29. Nov 2017 12:14

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

Aber ich kann es gerne in die übernächste Version einbauen als
Das wär u.a. für mich sehr hilfreich.
Das \\?\ hänge jedenfalls ich immer vor meine Pfade.
Es kommt zwar nicht so oft vor, dass ein Pfad MAX_PATH überschreitet, aber es kann schon vorkommen.

P.S. kannst du ebenfalls bestätigen, dass Embarcaderos Fix gar kein Fix war? Denn wenn hash in den uses steht, wird nach System.Hash gesucht und nicht nach deiner Hash-Unit.
Angeblich wurde das von Embarcadero ja behoben ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:26 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz