Каждый цикл состоит из 16-ти шагов, в которых производятся операции с буфером ABCD. Каждый шаг можно представить в виде схемы:
ABCD- 4 слов из буфера
После каждого шага происходит циклический сдвиг на одно слово.
CLSs- циклический сдвиг влево на s бит для 32- битного аргумента.
X[k]- к-е 32-битное слово в q-м 512-битном блоке сообщения.
T[i] - i-е 32-битное слово в таблице T.
+ - сложение по модулю 232.
На каждом из 4х циклов используется одна из 4х логических функций. Каждая элементарная функция получает три 33-битных слова и выдает 332-битную последовательность. Каждая функция представляет собой множество побитовых логических операций, где n-й бит выхода является функцией n-го бита от трех входов.
A←B+ CLSs(A+f(B,C,D)+x[k]+T[i])
fF=(B C)∨( =(B & C) or (not B & D)
fG=(B∧D)∨(C∧ )=(B & D) or (C & not D)
fH=B xor C xor D
fI=C xor (B & not D)
Массив из 32-битных слов x [0..15] содержит значение текущего 512-битного входного блока. На каждом этапе изменяется только одно из четырех слов. Каждое следующее слово меняется 16 раз. А затем 17й получил окончания выхода. В результате алгоритм MD-5 может быть просто записан следующим образом:
|
|
MD0=IV
MDq+1= MDq+fI(Yq, fH(Yq,fG(Yq,fF(Yq, MDq))))
MD= MDi-1
Где IV – значение буфера ABCD, определенное на шаге 3.