Wie sieht es denn bei dir inzwischen aus? (deine Code-Übersetzung)
hatte es selbst grad mal versucht und dachte erst "
des rechnet doch falsch", verglichen mit einem der PHP-MD5-Generatoren im INet ...
Doch hatte ganz vergessen, daß Windows nicht Big-Endian ist, sondern Little-Endian und man daher das Ergebnis umdrehn muß, da die MD5-Strings in Big-Endian ausgegeben werden.
IntToHex, sowie Format+%x machen es zumindestens so ... man könnte aber auch BinToHex nutzen, dieses arbeitet "andersrum".
(mein Funktions-Rumpf und die Umwandlung von h0-h1-h2-h3 nach String, damit du dich in Ruhe auf die Berechnung konzentrieren kannst und nicht daran scheiterst, nur weil es falsch dargestellt wird)
Delphi-Quellcode:
Function MD5(message: AnsiString): AnsiString;
Begin
...
//var int digest := h0 append h1 append h2 append h3 //(Darstellung als little-endian)
Result := Format('$%.2x%.2x%.2x%.2x %.2x%.2x%.2x%.2x %.2x%.2x%.2x%.2x %.2x%.2x%.2x%.2x',
[h0 shr 0 and $ff, h0 shr 8 and $ff, h0 shr 16 and $ff, h0 shr 24 and $ff,
h1 shr 0 and $ff, h1 shr 8 and $ff, h1 shr 16 and $ff, h1 shr 24 and $ff,
h2 shr 0 and $ff, h2 shr 8 and $ff, h2 shr 16 and $ff, h2 shr 24 and $ff,
h3 shr 0 and $ff, h3 shr 8 and $ff, h3 shr 16 and $ff, h3 shr 24 and $ff]);
End;
nicht wundern ... String = AnsiString ... aber damit man es auch unter Delphi2009 testen kann, da dieses Unicode ist.
Da du ja lernen willst, würde ich dir allerdings empfehlen es dir erst anzugucken, wenn du es selbst geschafft hast, oder du nicht weiter kommst.
Aber bei Letzerem kannst'e uns ja gern fragen ... das Beispiel in Wikipedia geht also schonmal, daran kann's nicht scheitern
[add]
Der Code entspricht weitgehenst dem Aufbau von Wiki's Code-Vorlage und enthält keinerlei Optimierungen ... Optimierteres findet man z.B. in meiner "Klasse"
ThxMD5