MD5, не кодирует и не декодирует. MD5 преобразует ввод переменного размера (до многих терабайт) в вывод фиксированного размера (128 бит, или 16 байтов). Смысл MD5 состоит в том, чтобы не допустить вычисления обратного преобразования.
Спецификация MD5 является короткой, простой для чтения и включает векторы испытаний и реализацию на языке Си. Многие языки программирования / среды уже включают реализации MD5. Есть также много независимых криптографических библиотек, которые предлагают реализации MD5 на разных языках; Возможно, вы захотите взглянуть на sphlib , который включает оптимизированный код для MD5 как на C, так и на Java.
Обратите внимание, что теперь MD5 считается криптографически слабым. В частности, были найдены способы для эффективного вычисления коллизий (два разных входа с одинаковым выходом), чего не должна допускать хорошая хеш-функция (коллизия обязательно существует для любой хэш-функции, но не должно быть осуществимым для фактического вычисления таких коллизий ; для MD5 это довольно просто [около 14 секунд ЦП на базовом ПК]).