In dem Artikel steht aber, dass Kollisionen nur für SHA-0 und reduzierte SHA-1 gefunden wurden, die Forscher aber nicht davon ausgehen, demnächst auch SHA-1 komplett brechen zu können. Selbst wenn dies gelingen sollte, kann man immer noch ausweichen: die SHA-2-Familie, Whirlpool, Tiger. Haval mit 5 Runden ist, sowei ich weiß, ebenfalls noch sicher (nicht allerdings mit 3 oder 4). Blöd nur, dass zum derzeitigen Standpunkt die meisten Programmiersprachen dies nicht mit den Standardbibliotheken liefern, dabei ist ein SHA-256 in 20 Minuten programmiert.
Zur Funktionsweise von Message Digest wurde die mathematische Seite schon hervorragend erklärt. In der Praxis sieht die Sache so aus: MD5 verwaltet intern 4 32-Bit-Integer (SHA-1 entsprechend 5: 5*32=160Bit). Der Input wird in Blöcken von meist 64 Bytes (unsigned Characters, also numerischer Wert 0-255) gegliedert (128 Bytes im Falle von Haval und SHA-512). Ist ein Block voll, wird eine Transform-Methode aufgerufen, in der diese Integer-Werte neu berechnet werden, und zwar mittels komplizierter bitweiser Operationen. Dazu gehören bitweise Rechts- (und auch Linksrotationen), logische Bit-Polynome, Verrechnung mit Konstanten (die meist eine Zufallssequenz abbilden). Die so erzeugte Hash-Summe wird dann meist auf die alten Integer-Werte aufaddiert und so in die nächste Transform-Runde übertragen. Ist die Eingabe kein vielfaches von 64 Bytes (oder 128), wird "gepaddet", d.h. zuerst 128 (oder 1 im Falle von Tiger) angehängt, dann eine Reihe von Nullen, und in jedem Fall die Angabe der Länge der Eingabe.
Man bekommt also zum Schluss 4 (bzw. 5 oder mehr, je nach Länge des Digests) 32-Bit-Integer-Werte, die man in 16 bzw. 20 Bytes (oder entsprechend) aufsplitten kann. Die Hexadezimal-Darstellung dient nur der Lesbarkeit für Bildschirmanzeigen, denn zwischen 0 und 32 siehst du im Char-Code nicht sonderlich viel.