Перетяжка струн при MD5 Hashing

Я пытаюсь реализовать хэш-функцию MD5 в C ++ и получить правильные результаты для некоторых входных значений, которые я нашел на некоторых веб-сайтах в Интернете, которые представляют собой некоторые шестнадцатеричные значения. До этого момента я был в состоянии заставить его работать правильно. Однако, когда я пытаюсь сделать то же самое со строками ASCII, мне не везет, и я не могу точно понять, что еще мне делать.

Первое, что я сделал, — это преобразовал строку ASCII в шестнадцатеричное значение и добавил один конец 0x80 в конце, после которого следует пакет 0x00 с, а в последних восьми байтах длина не добавленного сообщения в шестнадцатеричном формате.

Например, «test123» представляется в шестнадцатеричном виде как «0x74, 0x65, 0x73, 0x74, 0x31, 0x32, 0x33», а его длина в байтах равна 7. Тогда байтовый массив, который будет использоваться в качестве входных данных для хэш-функции, равен Я понял, как показано ниже,

const uint8_t test123Array[64] = {
0x74, 0x65, 0x73, 0x74, 0x31, 0x32, 0x33, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07
};

И когда я применил хеш-функцию, результат, который я получаю,

e7 54 fa ea 1e d7 69 ba 85 59 62 bf 16 e9 98 48

Принимая во внимание, что результат, который я получаю через веб-сайты с генератором хеша

cc 03 e7 47 a6 af bb cb f8 be 76 68 ac fe be e5

1

Решение

Длина данных учитывается не в байтах, а в битах. Итак, длина не 7, а 56 (0x38). Эта длина затем кодируется в 64 бит Little-Endian порядок байтов.

Подготовленный ввод должен выглядеть так:

const uint8_t test123Array[64] = {
0x74, 0x65, 0x73, 0x74, 0x31, 0x32, 0x33, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

спецификация MD5 вы связаны с содержит все, что вам нужно знать об этом. Присмотритесь к разделу «3.2 Шаг 2. Добавьте длину» и Encode функция в разделе «A.3 md5c.c».

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]