Forum: Algorithmen, Datenstrukturen und Klassendesign
by gammatester,
20. Jan 2015
Der Rest sind Little-endian-Probleme! Hier eine Version mit meinen Änderungen (//*WE), die die richtigen Hashwerte für '', 'abc' und 'Franz jagt im komplett verwahrlosten Taxi quer durch Bayern' liefert:
procedure PrepareText;
var l,j: Int64;
var i: integer;
begin
l:= Length(KlarText)*8;
KlarText:= Klartext+ Chr(128);
repeat
KlarText:= KlarText+Chr(0);
Forum: Algorithmen, Datenstrukturen und Klassendesign
by gammatester,
20. Jan 2015
Ich vermute, daß es nicht nur ein Fehler ist. Leider ist Dein Code ziemlich verwirrend: Angefangen mit der Tatsache, daß mal wieder Strings für Bytearrays misbraucht werden.
Mir ist auf jedenfall noch aufgefallen, daß die Shiftkonstanten s und die Rundenkonstanten K natürlich nicht mit der Blocknummer des Textes indiziert werden sondern mit dem Rundenindex pro Block (also Deinem j)! Wiki...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by gammatester,
16. Jan 2015
Sie Dir mal den Wiki-Artikel. Das Padding dient dazu, die Textlänge auf ein Vielfaches von 512 Bit zu bringen:
Im Pseudocode ist das der Teil // Vorbereitung der Nachricht 'message':
In der theoretischen Beschreibung vom MD5 wird dieses Padding und das Einfügen der 64-Bit-Textlänge am Anfang gemacht. In der Praxis arbeiten fast alle Implementationen mit der Möglichkeit auch Messages zu...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by gammatester,
15. Jan 2015
Dir fehlt das finale Padding/Compression. In Sourcecodes oft MD5_Final genannt (such mal danach).