Заполнение в алгоритме хеша MD5

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

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

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

Спасибо

Ответ 1

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.

Ответ 2

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

512 mod 448 = 64
448 mod 512 = 448

Другой подход 512 mod 448 состоит в том, чтобы разделить их 512/448 = 1.142..

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

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

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

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

Обычно нам нужно вычитать 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;