Algorytm paddingu jest zawarty w artykule MD5.
W poniższym kodzie a, b, c i d oznaczają rejestry stanu.
Inicjalizacja: a = 0x67452301; b = 0xefcdab89; c = 0x98badcfe; d = 0x10325476;
Pomocnicze makra: #define F(x, y, z) (x&y | ~x&z) #define G(x, y, z) (x&y | x&z | y&z) #define H(x, y, z) (x^y^z)
#define FF(v, w, x, y, z, s) { \ v += F(w, x, y) + z; \ v = ROTATE_LEFT(v, s); \
#define GG(v, w, x, y, z, s) { \ v += G(w, x, y) + z + 0x5a827999; \ v = ROTATE_LEFT(v, s); \
#define HH(v, w, x, y, z, s) { \ v += H(w, x, y) + z + 0x6ed9eba1; \ v = ROTATE_LEFT(v, s); \
ROTATE_LEFT(x, s) oznacza przesunięcie cykliczne 32-bitowej liczby o s bitów w lewo.
Stałe przesunięć: #define S11 3 #define S12 7 #define S13 11 #define S14 19 #define S21 3 #define S22 5 #define S23 9 #define S24 13 #define S31 3 #define S32 9 #define S33 11 #define S34 15
Transformacja bloku (x[i] to kolejne 32-bitowe fragmenty aktualnego bloku, w porządku little endian): aa = a; bb = b; cc = c; dd = d;