AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MD5 Algorithmus - Wo ist mein Fehler?

Ein Thema von B3ta · begonnen am 15. Jan 2015 · letzter Beitrag vom 21. Jan 2015
 
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#11

AW: MD5 Algorithmus - Wo ist mein Fehler?

  Alt 20. Jan 2015, 14:32
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:

Delphi-Quellcode:
procedure PrepareText;
var l,j: Int64;
var i: integer;
begin
  l:= Length(KlarText)*8;
  KlarText:= Klartext+ Chr(128);
  repeat
    KlarText:= KlarText+Chr(0);
  until Length(KlarText) mod 64 = 56;
  //*WE: Bitlaene als little-endian
  j := l;
  for i:=0 to 7 do begin
    KlarText:= KlarText+Chr(j and $ff);
    j := j shr 8;
  end;
end;

procedure HashMD5;
var A,B,C,D,temp,RotWert,FWert: LongWord;
var M: array[0..15] of LongWord;
var TempText,Hash: AnsiString;
var parts,p,j,g: integer; //Anzahl der 512 bit Stücke im KlarText
begin

  //Variablen auf Standard setzen:
  a0:= StrToInt('$67452301');
  b0:= StrToInt('$EFCDAB89');
  c0:= StrToInt('$98BADCFE');
  d0:= StrToInt('$10325476');

  PrepareText;

  parts:= Length(KlarText) div 64;

  for p:=1 to parts do begin
    TempText:= Copy(KlarText, ((p-1)*64+1), 64);
    for j:= 0 to 15 do begin
      //*WE: Block als little-endian
      M[j]:= ( ((Ord(TempText[4])) shl 24) or ((Ord(TempText[3])) shl 16) or
              ((Ord(TempText[2])) shl 8) or (Ord(TempText[1])) );
      Delete(TempText, 1, 4);
    end;

    A:=a0;
    B:=b0;
    C:=c0;
    D:=d0;

    for j:=0 to 63 do begin
      Case j of
        0..15: begin
          g:= j;
          FWert:= F1(B,C,D);
          temp:= D;
          D:= C;
          C:= B;
          RotWert:= (((A+FWert+K[j]+M[g]) shl s[j])
                      or ((A+FWert+K[j]+M[g]) shr (32-s[j])));
          B:= B+RotWert;
          A:= temp;
        end;

        16..31: begin
          g:= (5*j +1) mod 16;
          FWert:= F2(B,C,D);
          temp:= D;
          D:= C;
          C:= B;
          RotWert:= (((A+FWert+K[j]+M[g]) shl s[j])
                      or ((A+FWert+K[j]+M[g]) shr (32-s[j])));
          B:= B+RotWert;
          A:= temp;
        end;

        32..47: begin
          g:= (3*j +5) mod 16;
          FWert:= F3(B,C,D);
          temp:= D;
          D:= C;
          C:= B;
          RotWert:= (((A+FWert+K[j]+M[g]) shl s[j])
                      or ((A+FWert+K[j]+M[g]) shr (32-s[j])));
          B:= B+RotWert;
          A:= temp;
        end;

        48..63: begin
          g:= (7*j) mod 16;
          FWert:= F4(B,C,D);
          temp:= D;
          D:= C;
          C:= B;
          RotWert:= (((A+FWert+K[j]+M[g]) shl s[j])
                      or ((A+FWert+K[j]+M[g]) shr (32-s[j])));
          B:= B+RotWert;
          A:= temp;
        end;
      end;
    end;
    a0:= a0+A;
    b0:= b0+B;
    c0:= c0+C;
    d0:= d0+D;
  end;

  //*WE: Hash als little-endian
  Hash := IntToHex(a0 and $ff,2) +
          IntToHex((a0 shr 8) and $ff,2) +
          IntToHex((a0 shr 16) and $ff,2) +
          IntToHex((a0 shr 24) and $ff,2) +
          IntToHex(b0 and $ff,2) +
          IntToHex((b0 shr 8) and $ff,2) +
          IntToHex((b0 shr 16) and $ff,2) +
          IntToHex((b0 shr 24) and $ff,2) +
          IntToHex(c0 and $ff,2) +
          IntToHex((c0 shr 8) and $ff,2) +
          IntToHex((c0 shr 16) and $ff,2) +
          IntToHex((c0 shr 24) and $ff,2) +
          IntToHex(d0 and $ff,2) +
          IntToHex((d0 shr 8) and $ff,2) +
          IntToHex((d0 shr 16) and $ff,2) +
          IntToHex((d0 shr 24) and $ff,2) ;
  Form1.Label1.Caption:= Hash;

end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz