подблоков. Виходом алгоритму є набір з чотирьох 32-бітових блоків, які об'єднуються в єдине 128-бітове хеш-значення. По перше, повідомлення доповнюється так, щоб його довжина була на 64 біта коротше числа, кратного 512. Цим доповненням є 1, за якою аж до кінця повідомлення випливає стільки нулів, скільки потрібно. Потім, до результату додається 64-бітове представлення довжини повідомлення (істинної, до доповнення). Ці дві дії служать для того, щоб довжина повідомлення була кратна 512 бітам (що потрібно для решти алгоритму), і щоб гарантувати, що різні повідомлення не будуть виглядати однаково після доповнення. Инициализируются чотири змінних:
А = Ox01234567
В = Ox89abcdef
С = Oxfedcba98 = Ox76543210
Вони називаються змінними зчеплення.
Тепер перейдемо до основного циклу алгоритму. Цей цикл триває, поки не вичерпаються 512-бітові блоки повідомлення. Чотири змінних копіюються в інші змінні: A в a, B у b, C в c і D в d. p align="justify"> Головний цикл складається з чотирьох дуже схожих етапів (у MD4 було тільки три етапи). На кожному етапі 16 разів використовуються різні операції. Кожна операція являє собою нелінійну функцію над трьома з а, b, с і d. Потім вона додає цей результат до четвертої змінної, подблоков тексту і константі. Далі результат циклічно зсувається вправо на змінне число бітів і додає результат до однієї з змінних а, b, с і d. Нарешті результат замінює одну з змінних а, b, с і d. Існують чотири нелінійних функції, використовувані по одній в кожній операції (для кожного етапу - інша функція). br/>В
Рис. 0. Головний цикл MD5
В
Рис. 2. Одна операція MD5
F (X, Y, Z) = (X Г™ Y) Гљ (( Г? X) Г™ Z)
G (X, Y, Z) = (X Г™ Z) Гљ (Y Г™ ( < span align = "justify"> Г? Z)) (X, Y, Z) = X Г… < span align = "justify"> Y Г… Z (X, Y, Z) = Y Г… (X Гљ ( Г? Z))
( Г… - це XOR, Г™ - AND, ...