Заполнение в алгоритме хеширования MD5 - PullRequest
11 голосов
/ 14 марта 2012

Мне нужно понять алгоритм хеширования Md5.Я читал документы, и в нем говорится:

"Сообщение" дополнено "(расширенно), так что его длина (в битах) соответствует 448, по модулю 512. То есть сообщение расширяется, так что оноэто всего лишь 64 бита, чтобы быть кратным длине 512 бит. Заполнение всегда выполняется, даже если длина сообщения уже соответствует 448, по модулю 512. "

Мне нужно понять, что это означает впростые термины, особенно 448 по модулю 512. Слово MODULO является проблемой.Пожалуйста, я буду признателен за простые примеры к этому.Забавно, но это первый шаг к хешу MD5!:)

Спасибо

Ответы [ 2 ]

10 голосов
/ 14 марта 2012

Modulo или mod, это функция, которая приводит к сообщению остатка, когда два числа делятся друг на друга.

Например:

5 по модулю 3:

5/3 = 1, с 2 остатками.Таким образом, 5 mod 3 равно 2.

10 по модулю 16 = 10, потому что нельзя сделать 16.

15 по модулю 5 = 0, потому что 15 входит в 5 ровно 3 раза.15 - это число, кратное 5.

Вернувшись в школу, вы бы усвоили это как «Остаток» или «Остаток», по модулю это просто причудливый способ сказать это.

Что это такоездесь говорится, что когда вы используете MD5, первое, что происходит, это то, что вы добавляете сообщение, чтобы оно было достаточно длинным.В случае MD5 ваше сообщение должно быть n бит, где n = (512 * z) +448, а z - любое число.

Например, если у вас был файл длиной 1472 бита, то вымог бы использовать его в качестве хэша MD5, потому что 1472 по модулю 512 = 448. Если бы файл имел длину 1400 бит, то вам нужно было бы добавить дополнительные 72 бита, прежде чем вы сможете запустить оставшуюся часть алгоритма MD5.

1 голос
/ 16 июля 2015

Модуль - это остаток деления. В примере

512 mod 448 = 64
448 mod 512 = 448

Другой подход 512 мод 448 будет разделить их 512/448 = 1,142 ..

Затем вы вычитаете 512 из номера результата до умножения точки на 448:

512 - 448*1 == 64 That's your modulus result.

Что нужно знать, что 448 на 64 бита короче, чем кратное 512.

Но что, если это между 448 и 512 ?? 1013 *

Обычно нам нужно вычесть 448 на x (результат модуля).

 447 mod 512 = 447; 448 - 447 = 1; (all good, 1 zero to pad)

 449 mod 512 = 1; 448 - 449 = -1 ???

Таким образом, для решения этой проблемы было бы взять более высокое кратное 512, но все еще меньше 64;

512*2 - 64 = 960
449 mod 512 = 1; 960 - 449 = 511;

Это происходит потому, что после этого нам нужно добавить 64-битное исходное сообщение, а полная длина должна быть кратна 512.

960 - 449 = 511; 
511 + 449 + 64 = 1024; 
1024 is multiple of 512; 
...