Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#3

Re: MD5 Implementation für Delphi 2009

  Alt 22. Sep 2008, 20:44
Zitat von gammatester:
Ich weiß zwar nicht, was für Schweinerein in D2009 eingebaut sind, aber meine CRC/Hash-Routinen laufen bis D2006/7 und Lazarus/FPC2.2.2 sogar unter Linux/ARM (in der PurPascal-Version).

Ich sehe also kein Problem für D2009 bzw. wäre interessiert an Hinweisen, falls es doch welche geben sollte.

Gruß Gammatester
Überprüfe mal alle Stellen, an denen du davon ausgehst, daß Sizeof(char) = 1 ist bzw. daß die Anzahl der Zeichen eines Strings gleich der Speichergröße dieses Strings ist.

Beispiel: MD5.pas - MD5SelfTest - SingleTest

Delphi-Quellcode:
  
  function SingleTest(s: string; TDig: TMD5Digest): boolean;
    {-do a single test, const not allowed for VER<7}
    { Two sub tests: 1. whole string, 2. one update per char}
  var
    i: integer;
  begin
    SingleTest := false;
    {1. Hash complete string}
    MD5Full(Digest, @s[1],length(s));
    {Compare with known value}
    if not HashSameDigest(@MD5_Desc, PHashDigest(@Digest), PHashDigest(@TDig)) then exit;
    {2. one update call for all chars}
    MD5Init(Context);
    for i:=1 to length(s) do MD5Update(Context,@s[i],1);
    MD5Final(Context,Digest);
    {Compare with known value}
    if not HashSameDigest(@MD5_Desc, PHashDigest(@Digest), PHashDigest(@TDig)) then exit;
    SingleTest := true;
  end;
Der Aufruf von MD5Full wird unter D2009 etwas anders ausgehen, als noch unter D2007. Eine Lösung, die in beiden Fällen läuft wäre

MD5Full(Digest, @s[1], length(s)*sizeof(Char)); Allerdings glaube ich kaum, daß die Hashwerte eines AnsiStrings mit denen eines UnicodeStrings übereinstimmen, welbst wenn sie die gleiche Zeichenfolge enthalten.
Uwe Raabe
  Mit Zitat antworten Zitat