Einzelnen Beitrag anzeigen

CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#12

AW: md5 hash einer Datei Lazarus

  Alt 28. Jul 2011, 12:30
Hmmm... das hat mich doch jetzt nicht losgelassen, daher habe ich mal angefangen zu testen...

Vorab: der CryptAcquireContext-Part ist sauteuer. Wer nur einen Hash braucht, sollte eine andere Methode verwenden; wer mehrere Hashes braucht, sollte den Provider nur einmal darüber acquirieren (ich habe das in den initialization/finalization-Teil der Test-Unit dafür gepackt).

Meine Ergebnisse folgen, und obwohl ich bisher nur kurze und mittlere RawByteString untersucht habe und gar nicht auf Dateien gegangen bin, sieht man schon unterschiedliche Ergebnisse für unterschiedliche Anwendungsfälle.

WinCrypt ist bei größeren Datenmengen tatsächlich sehr gut, bei sehr kleinen dagegen das genaue Gegenteil. DEC ist das Gegenteil zu WinCrypt - bei kleinen Mengen um Längen besser, bei großen langsamer. advapi32.dll schlägt sich ebenfalls sehr gut (Windows-intern evtl. gar dasselbe wie WinCrypt?). Der FPC-Code bleibt zurück, ist aber in einer ähnlichen Kategorie wie DCrypt.

Meine Konsequenz? Danke für die Anregungen hier, ich werde den Test mal auf diverse Dateien ausweiten (sowohl per Stream als auch File Mapping) und daraus sicherlich etwas gewinnen

Code:
= MD5 (Message Digest 5) =
== String tests ==
=== String test "short text" ===
Test line:   Hallo Welt, Hello World!
Test length: 24
Repeat count: 500000

           RFC 1321 by Matthias Fichtner: 00:01.559 (93421b70ad52f2495be431fa727179c1)
            Free Pascal development team: 00:01.214 (93421b70ad52f2495be431fa727179c1)
                      Windows (WinCrypt): 00:02.565 (93421b70ad52f2495be431fa727179c1)
                Hagen Reddmann (DEC 5.2): 00:00.490 (93421b70ad52f2495be431fa727179c1)
            DCPcrypt v2.0 (David Barton): 00:01.221 (93421b70ad52f2495be431fa727179c1)

=== String test "random long text" ===
Test line:   (0*!!!4%(0)(1(5 2 "$($&*+32()' ',07 4...
Test length: 99999
Repeat count: 1000

           RFC 1321 by Matthias Fichtner: 00:02.317 (db60c7fab72be4c6887b6160df41e45f)
            Free Pascal development team: 00:01.326 (db60c7fab72be4c6887b6160df41e45f)
                      Windows (WinCrypt): 00:00.215 (db60c7fab72be4c6887b6160df41e45f)
                Hagen Reddmann (DEC 5.2): 00:00.180 (db60c7fab72be4c6887b6160df41e45f)
            DCPcrypt v2.0 (David Barton): 00:00.986 (db60c7fab72be4c6887b6160df41e45f)

= SHA-1 (Secure Hash Algorithm 1) =
== String tests ==
=== String test "short text" ===
Test line:   Hallo Welt, Hello World!
Test length: 24
Repeat count: 500000

                             Dave Barton: 00:01.602 (017c54b20080d80e03b1b80ecbdf68a86665e644)
                  Windows (advapi32.dll): 00:00.877 (017c54b20080d80e03b1b80ecbdf68a86665e644)
                      Windows (WinCrypt): 00:02.253 (017c54b20080d80e03b1b80ecbdf68a86665e644)
                Hagen Reddmann (DEC 5.2): 00:00.792 (017c54b20080d80e03b1b80ecbdf68a86665e644)
            DCPcrypt v2.0 (David Barton): 00:01.621 (017c54b20080d80e03b1b80ecbdf68a86665e644)

=== String test "random long text" ===
Test line:   2621%1-+,2(*,*#2*+/0#*/2(*0,'+0%#2%+"...
Test length: 99999
Repeat count: 1000

                             Dave Barton: 00:02.602 (28f429f7e4ab4e631ac5cad469ce8d6056336015)
                  Windows (advapi32.dll): 00:00.264 (28f429f7e4ab4e631ac5cad469ce8d6056336015)
                      Windows (WinCrypt): 00:00.260 (28f429f7e4ab4e631ac5cad469ce8d6056336015)
                Hagen Reddmann (DEC 5.2): 00:00.972 (28f429f7e4ab4e631ac5cad469ce8d6056336015)
            DCPcrypt v2.0 (David Barton): 00:01.638 (28f429f7e4ab4e631ac5cad469ce8d6056336015)
  Mit Zitat antworten Zitat