AGB  ·  Datenschutz  ·  Impressum  







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

MD5 Checksumme und Range Checking

Ein Thema von TSHObject · begonnen am 24. Aug 2007 · letzter Beitrag vom 24. Aug 2007
Antwort Antwort
TSHObject

Registriert seit: 29. Apr 2006
Ort: Schweiz
10 Beiträge
 
Delphi 12 Athens
 
#1

MD5 Checksumme und Range Checking

  Alt 24. Aug 2007, 11:59
Hallo,

ich möchte den MD5-Hash über einen Stream/Datei berechnen.

Zuerst habe ich es mit dieser Variante versucht:

http://www.koders.com/delphi/fid5A4F...DF205615E.aspx

und dann noch mit dieser hier:

http://www.delphipraxis.net/internal...ct.php?p=65767

Beide Versionen funktionieren, solange man das Range-Checking im Projekt ausgeschaltet hat.
Compiliert man das Projekt mit Range-Checking so crasht die Sache wegen einem Integer Overflow
und zwar hier. (code schnippsel aus der Variante 2).

Delphi-Quellcode:
// Write new 'state' back
  State[0] := State[0] + a;
  State[1] := State[1] + b;
  State[2] := State[2] + c;
  State[3] := State[3] + d;
// Zeroize sensitive information.
Frage, hat jemand dies auch schon bemerkt ? Und evtl. eine Lösung.

Vielen Dank.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: MD5 Checksumme und Range Checking

  Alt 24. Aug 2007, 12:12
Range Checking deaktivieren. Der Source ist richtig, allerhöchstens sind die Datentypen falsch und sollten Cardinal statt Integer sein. Aber, das hilft nur in neueren Delphi Versionen, in älteren würde das Range Checking beim Typ Cardinal so gemacht wie beim Typ Integer, also vorzeichenbehaftet wo es eigentlich ohne Vorzeichen gehen müsste. Nun dann nütz aber das Range Checking rein garnichts mehr da die meisten Cryptosourcen einen Überlauf

A := A + B

als

A := (A + B) mod 2^32

ausnutzen. Es ist also gewollt das ein Überlauf entsteht. Ansonsten müsste der Programmierer auch A := (A + B) mod 2^32 berechnen was aber beim Datentyp Cardinal unsinnig ist das der nur bis 2^32-1 reicht. Ergo würde der Compiler das erkennen und diese Beerechnung in den nächt höheren Datentyp umrechnen, das wäre Int64. Nun dadurch verlangsamt sich aber der komplette Code gewaltig da die Int64 Routionen RTL Funktionen sind, statt direkte 32 Bit Operationen.

Ergo: der Compiler wirft hier dem Programmier stängig Knüppel durch zwischen die Beine und macht ungewoltes. Also Range Checking deaktivieren. Dieses aktive Compilerfeature ist eh immer unzuverlässiger geworden, mit jeder Delphi Version ein bischen schlechter.

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:55 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