Hey
Super, ihr habt mir in Riesenschritten weitergeholfen!
Von der reinen Logik her habe ich den Algorithmus denke ich nun einigermaßen verstanden.
Die Umsetzung jedoch funktioniert noch nicht so wirklich:
Ich habe mir mal himitsus freundlich bereitgestellten Code genauer angesehen. Dabei ist mir aufgefallen, dass die Vorbereitung wesentlich eleganter aussieht. Aktuell bin ich soweit, dass ich zwar einen Hash erzeugen kann, der jedoch nicht grade nach MD5 aussieht (aus "test" kommt "$6320DC97 D66ACA76 A4A1F2AD D851C940"). Könnte es also an der Vorbereitung liegen?
Delphi-Quellcode:
textlength := length(text) * 8;
textlengthbin := IntToBin(textlength);
text := text + '1';
while ((length(text) * 8) mod 512) <> 448 do
text := text + '0';
while (length(textlengthbin) * 8) mod 512 <> 64 do
textlengthbin := '0' + textlengthbin;
text := text + textlengthbin;
Ist die genauso funktionstüchtig, wie ich es mir gedacht habe?
Text ist die eingehende Message (string), textlengthbin ein string.
(Es ist mir klar, dass ich das ganze *8 auch auslassen könnte und direkt mit den richtigen zahlen rechnen könnte, das ist bloß zum besseren Verständnis da
Ich meine eher das anhängen der Binärfolge.)
Vielleicht liegt die Fehlerquelle auch woanders. Die Zuweisung von w ist mir auch sehr ins Auge gesprungen:
Pointer(w) := PAnsiChar(message);
Diese Zeile verstehe ich leider nicht. Wie kommen denn da 32-Bit-Blöcke heraus?
Bei mir siehen die Blockunterteilungen so aus:
Delphi-Quellcode:
for x := 1 to (length(text) * 8) div 512 do
begin
block := copy(text, 512 div 8, 512 div 8);
for i := 0 to 15 do
w[i] := StrToInt(copy(block, (i + 1) * (32 div 8), 32 div 8));
{...}
Dabei ist block ein String, in welchen die 512-Bit-Blöcke geladen werden sollen.
{...} ist der restliche Code - also Zuweisung von a,b,c,d und die Hauptschleife.
Für die Ausgabe habe ich vorläufig erstmal die oben stehende Lösung genutzt (danke auch nochmal dafür
), damit ich erstmal überhaupt einen Hash herausbekomme, um zu sehen, ob es der Richtige ist - ich werde mir aber auch noch einmal eine eigene Lösung erarbeiten
Nunja, jedenfalls finde ich den Fehler nicht wirklich, wahrscheinlich ein Denkfehler meinerseits.
Danke!
PS: Ganz am Rande... ich habe logische Operatoren vorher nicht sonderlich oft auf Integer angewendet - was AND und OR bewirken, ließ sich recht schnell erschließen, aber was bewirkt denn NOT, sodass aus einer 4 eine -5 wird?