Заполнение в алгоритме хеша 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;