Забудьте о порядке байтов: это просто название способа кодирования информации.
Давайте следовать статье Википедии MD5 . Вы начинаете с входного сообщения. Он может быть произвольно длинным: хеши MD5 для ISO-файлов размером 2 ГБ обычно создаются, как хеши для строк длиной в дюжину символов (например, для паролей).
Хеш будет содержаться в регистрах a
, b
, c
и d
. Эти регистры инициализируются специальными значениями (h0-h3
).
Алгоритм разбивает входные данные на 16 4-байтовых блоков («шестнадцать 32-битных слов с прямым порядком байтов») и применяет определенные логические операции (функции F
, G
, H
и I
) для части ввода и текущее состояние регистров a
, b
, c
и d
. Это делается 64 раза для каждого набора из 16 4-байтовых блоков.
Когда все чанки обработаны, то, что остается в a
, b
, c
и d
, является окончательным хешем, который вы можете получить, вызвав md5sum testfile.txt
.
Обновление:
Если вы просто хотите вычислить хеш, самостоятельная реализация его не имеет смысла, потому что это было сделано и протестировано, вероятно, для каждого существенного языка:
Python
import md5
md5.new("Nobody inspects the spammish repetition").digest()
SQL ( MySQL ):
SELECT MD5('Nobody inspects the spammish repetition')
Java
String s="Nobody inspects the spammish repetition";
MessageDigest m=MessageDigest.getInstance("MD5");
m.update(s.getBytes(),0,s.length());
System.out.println(new BigInteger(1,m.digest()).toString(16));
* * И т.д. тысяча сорок-девять