Jabarkan Pseudocode dari MD5

Pseudocode pada algoritme MD5 adalah sebagai berikut.

//Catatan: Seluruh variable pada unsigned integer 32-bit dan dan wrap modulo 2^32 saat melakukan perhitungan

r[ 0..15]:= {7, 12, 17, 22,  7, 12, 17, 22,  7, 12, 17, 22,  7, 12, 17, 22}

r[16..31]:= {5,  9, 14, 20,  5,  9, 14, 20,  5,  9, 14, 20,  5,  9, 14, 20}

r[32..47]:= {4, 11, 16, 23,  4, 11, 16, 23,  4, 11, 16, 23,  4, 11, 16, 23}

r[48..63]:= {6, 10, 15, 21,  6, 10, 15, 21,  6, 10, 15, 21,  6, 10, 15, 21}

//Menggunakan bagian fraksional biner dari integral sinus sebagai konstanta:

for i from 0 to 63

k[i]:= floor(abs(sin(i + 1)) × 2^32)

append "1" bit to message

append "0" bits until message length in bits ≡ 448 (mod 512)

append bit length of message as 64-bit little-endian integer to message

//Pengolahan pesan paada kondisi gumpalan 512-bit:

for each 512-bit chunk of message

break chunk into sixteen 32-bit little-endian words w(i), 0 ≤ i ≤ 15

//Inisialisasi nilai hash pada gumpalan ini:

for i from 0 to 63

if 0 ≤ i ≤ 15 then

f:= (b and c) or ((not b) and d)

else if 16 ≤ i ≤ 31

f:= (d and b) or ((not d) and c)

g:= (5×i + 1) mod 16

else if 32 ≤ i ≤ 47

f:= b xor c xor d

g:= (3×i + 5) mod 16

else if 48 ≤ i ≤ 63

f:= c xor (b or (not d))

b:= ((a + f + k(i) + w(g)) leftrotate r(i)) + b

//Tambahkan hash dari gumpalan sebagai hasil:

var int digest:= h0 append h1 append h2 append h3 //(diwujudkan dalam little-endian)

Catatan: Meskipun rumusan dari yang tertera pada RFC 1321, berikut ini sering digunakan untuk meningkatkan efisiensi:

(0  ≤ i ≤ 15): f:= d xor (b and (c xor d))

(16 ≤ i ≤ 31): f:= c xor (d and (b xor c))

Hash-hash MD5 sepanjang 128-bit (16-byte), yang dikenal juga sebagai ringkasan pesan, secara tipikal ditampilkan dalam bilangan heksadesimal 32-digit.

Berikut ini merupakan contoh pesan ASCII sepanjang 43-byte sebagai masukan dan hash MD5 terkait:

MD5("The quick brown fox jumps over the lazy dog") = 9e107d9d372bb6826bd81d3542a419d6

Bahkan perubahan yang kecil pada pesan akan (dengan probabilitas lebih) menghasilkan hash yang benar-benar berbeda, misalnya pada kata "dog", huruf d diganti menjadi c:

MD5("The quick brown fox jumps over the lazy cog") = 1055d3e698d289f2af8663725127bd4b