Ich vermute, daß es nicht nur ein Fehler ist. Leider ist Dein Code ziemlich verwirrend: Angefangen mit der Tatsache, daß mal wieder Strings für Bytearrays misbraucht werden.
Mir ist auf jedenfall noch aufgefallen, daß die Shiftkonstanten s[i] und die Rundenkonstanten K[i] natürlich
nicht mit der Blocknummer des Textes indiziert werden
sondern mit dem Rundenindex pro Block (also Deinem j)! Wiki verwendet übrigens i für den Rundenindex, warum weichst Du davon ab und nimmst i für die 512-Bit-Blockindex der Nachricht? Wahrscheinlich sind die Bufferbytes dann auch falsch indiziert (also g wohl via j berechnen), wobei diese g-Konstruktion ziemlich undurchsichtig ist.
Ein schneller Hack zeigt, daß dies allerdings nicht der einzige Fehler ist. Wenn Du wirklich das
Rad mit nach diesem Pseudocode neu-erfinden willst, empfehle ich Dir die angesprochenen Änderungen zumachen und dann schrittweise mit einer bekannt-richtigen MD5-Implementation zu vergleichen.