Функция хеширования MD5.

MD5 – это односторонняя функция, разработанная Роном Ривестом. Ее результатом является 128-битное хэш-значение.

 

После некоторой первоначальной обработки MD5 обрабатывает входной текст 512-битовыми блоками, разбитыми на 16 32-битовых блоков. Выходом алгоритма является набор из 4 32-битовых блоков, которые объединяются в единое 128-битное хэш-значение.

Сообщение дополняется так, чтобы его длина была на 64 бита короче числа, кратного 512. Этим дополнением является 1, за которой вплоть до конца сообщения дописывается столько нулей, сколько нужно. Затем к результату добавляется 64-битовое представление длины сообщения. Чтобы гарантировать, что разные сообщения не будут выглядеть одинаково после дополнения. Затем инициализируются четыре переменных:A,B,C ,D ( переменные сцепления).
Далее главный цикл алгоритма. Он продолжается, пока не исчерпаются 512-битовые блоки сообщения.Четыре переменных копируются в другие переменные A → a, B → b, C → c, D → d.
Главный цикл состоит из четырех очень похожих этапов. На каждом из них 16 раз используются различные операции. Каждая операция представляет собой нелинейную функцию над тремя из a, b, c, d. Затем эта операция добавляет результат к четвертой переменной, подблоку текста и константе. Результат циклически сдвигается вправо на переменное число битов и добавляет результат к одной из переменных a, b, c, d.Результат заменяет одну из переменных.