MD5-Algorithm in PHP

ZodiacXP

Erfahrenes Mitglied
Hoi.

Fragt nicht warum. ;)

So weit bin ich schon aber dann gehen bei mir die Lichter aus, weil ich mit Little-Endian relativ wenig anfangen kann:

PHP:
$txt = "geschafft!";

$a = array(
  7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,
  5,  9, 14, 20, 5,  9, 14, 20, 5,  9, 14, 20, 5,  9, 14, 20,
  4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,
  6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21
);

for ($i = 0; $i < 64; $i++) {
  $k[$i] = floor(abs(sin(i + 1)) * pow(2, 32));
}

$h0 = 0x67452301;
$h1 = 0xEFCDAB89;
$h2 = 0x98BADCFE;
$h3 = 0x10325476;

for ($i = 0; $i < strlen($txt); $i++) {
	$bin .= sprintf("%08s", decbin(ord($txt[$i])));
}

$message_laenge = strlen($bin);
$bin .= 1;
$bin .= str_repeat("0", 447-$message_laenge);
$big_endian = sprintf("%064s", decbin($message_laenge));
for ($i = 63; $i != 0; $i -= 7)
{
	$bin .= substr($big_endian, ($i-7), $i);
}

Vielleicht kann einer mir sagen ob ich das Hinzufügen der Länge als Little-Endian richtig gemacht hab und/oder wie ich nun weitermach. Versteh die Aufteilung in Wörter nicht - vielleicht zu stumpf.

http://de.wikipedia.org/wiki/Message-Digest_Algorithm_5

Oder jemand weis wo es sowas schon gibt ;)
 
Zuletzt bearbeitet:
Hallo,

sieht bisher eigentlich ganz gut aus. Nur das "mod 512" hast du beim Auffüllen nicht beachtet. Was verstehst du denn beim Aufteilen in die 32-Bit-Worte nicht? Du nimmst dir einfach jeweils 32 Zeichen von deinem Binärstring, wandelst sie in eine Zahl um und rechnest damit rum wie im Artikel angegeben.

Grüße,
Matthias

PS: Jetzt muss ich aber doch noch fragen: warum?
 
Achso, doch so stumpf.
Und diese "32-bit" behandel ich als wären sie little-endian und wandel sie entsprechend in eine Zahl um.

Dann steht da noch "leftrotate". Dazu habe ich garnichts gefunden.

Auf die Frage: Warum?
Möchte einen eigenen Hash-Algo schreiben und von daher mal andere kennenlernen.
 
Vllt ist mit leftrotate eine Bit-Verschiebung nach links gemeint?!
Weißt garnich ob es nen "Verschieben-operator" in PHP gibt...

lg
 
Bitverschiebung ist >> oder <<
So wie z.B. 2^10 = 1 << 10; oder whatever / 2 = whatever >> 1

Google liefert so gut wie keine Ergebnisse dazu und so ganze ist mir leftrotate immernoch nicht klar.
 
Bei sowas lese ich immer den englischen Artikel direkt mit.
Gerade in den Programmierbereichen findet man dort oft mehr Sourcecode und bessere Erklärungen...

Viel Erfolg :)
 
Zurück