Christoph Zurnieden: MD5-Impl. (Torgemane/Mieke) kaput?

Hi,

nachdem ich o.a. Javascript-MD5-Implementation schon für viele un- aber auch sinnige Zwecke benutzt hatte fällt mir erst jetzt auf, das sich der Wrapper (MD5()) für mich nicht so ganz nachvollziehbar auf ASCII beschränkt.

(String "ä" ist 2 Byte a 8 Bit lang, 2er Komplement und little endian; Zeichensatz ist Latin-1: 0xE4,0x00)

md5sumRFC("ä") = c15bcc5577f9fade4b4a3256190a59b0
md5sumTMI("ä") = 00594fd4f42ba43fc1ca0427a0576295

(da lastIndexOf() im Fehlerfall -1 zurückgibt, entspricht md5sumTMI("ä") der md5sumRFC(0xFF + 0x00))

Gibt es dafür einen _guten_ Grund?
Außer dem, so Blinde und Blöde wie mich auf den Arm zu nehmen und geschlagene zwei Stunden im eigenem Code nach dem Fehler suchen zu lassen? ;-}

Ich bin es hier ja selber schuld, klar, aber es gibt bestimmt einige, die das Dingen guten Gewissens benutzen. Man sollte es also zumindest dranschreiben oder evt sogar ändern.

Da ich mir recht sicher bin lediglich mal wieder der einzige zu sein, der rein gar nix mitbekommen hat, so möchte ich wenigstens vorher fragen, ob das so seine Richtigkeit hat.

Quick&Dirty Patch (Änderung des Mapings nach ASCII in direktes Maping.):

function MD5(nachricht)
{
 var l,s,k,ka,kb,kc,kd;

init();
 for (k=0;k<nachricht.length;k++) {
   /*l=nachricht.charAt(k);
   update(ascii.lastIndexOf(l));*/
   update(nachricht.charCodeAt(k)&0xFF);
 }
 finish();
 ka=kb=kc=kd=0;
 for (i=0;i<4;i++) ka+=shl(digestBits[15-i], (i*8));
 for (i=4;i<8;i++) kb+=shl(digestBits[15-i], ((i-4)*8));
 for (i=8;i<12;i++) kc+=shl(digestBits[15-i], ((i-8)*8));
 for (i=12;i<16;i++) kd+=shl(digestBits[15-i], ((i-12)*8));
 s=hexa(kd)+hexa(kc)+hexa(kb)+hexa(ka);
 return s;
}

Test:
md5sumRFC("ä") = c15bcc5577f9fade4b4a3256190a59b0
md5sumPAT("ä") = c15bcc5577f9fade4b4a3256190a59b0

so short

Christoph Zurnieden