MD5 использует соглашение с прямым порядком байтов на уровне битов, а затем соглашение с прямым порядком байтов на уровне байтов.
Вход представляет собой упорядоченную последовательность битов. Восемь последовательных битов - это байт . Байт имеет числовое значение от 0 до 255; каждый бит в байте имеет значения 128, 64, 32, 16, 8, 4, 2 или 1, в таком порядке (это то, что означает "big-endian at bit level").
Четыре последовательных байта являются 32-битным словом. Числовое значение слова находится в диапазоне от 0 до 4294967295. Первый байт наименее значимый в этом слове ("little-endian на уровне байтов"). Следовательно, если четыре байта равны a , b , c и d в этом порядке, то числовое значение слова равно а + 256 * B + 65536 * с + 16777216 * д . * * 1 021
В программных приложениях ввод почти всегда представляет собой последовательность байтов (его длина в битах кратна 8). Предполагается, что объединение битов в байты уже произошло. Таким образом, дополнительный бит дополнения '1' будет первым битом следующего байта, и, поскольку соглашение о битовом уровне является старшим, этот следующий байт будет иметь числовое значение 128 (0x80).
Для пустого сообщения самым первым битом будет бит дополнения '1', за которым следует целый набор нулей. Длина сообщения также равна нулю, что кодирует еще одни нули. Следовательно, блок дополненных сообщений будет представлять собой один «1», за которым следует 511 «0», как показано. Когда биты собраны в байты, первый байт будет иметь значение 128, за которым следуют 63 байта значения 0. Когда байты сгруппированы в 32-битные слова, первое слово ( M 0 ) будет иметь числовое значение 128, а 15 других слов ( M 1 до M 15 ) будут иметь числовое значение 0.
Подробнее см. MD5 . То, что я описал выше, это то, что объясняется в первом абзаце раздела 2 RFC 1321. Такое же кодирование используется для длины бит сообщения (в конце заполнения) и для записи окончательного результата хеширования.