Einzelnen Beitrag anzeigen

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