Алгоритм хеширования MD5, шаги 2 и 3 - PullRequest
0 голосов
/ 08 мая 2018

Я создал репозиторий на github , чтобы написать некоторые алгоритмы компьютерной безопасности, и пришло время написать алгоритм MD5, я искал документы / видео, объясняю алгоритм с примерами и пошаговыми инструкциями, но я не сталт.

  • Я написал это для шага 1, и я не знаю, правильно ли это или нет?

    //step1
    var textP = ToBinaryString(Encoding.UTF8, text);
    textP = textP.Length < 448 ? textP + '1' : textP;
    while (textP.Length <448)
    {
        textP += '0';
    }
    Console.WriteLine(textP);
    
  • Секунда:к шагу 2 добавьте длину

    64-битное представление b добавляется к результату предыдущего шага. Полученное сообщение имеет длину, кратную 512 битам

    это значит добавить к 448 битам исходные биты строки?

1 Ответ

0 голосов
/ 09 мая 2018

Нет, первый шаг неверен, так как он не дополняет должным образом, если в блоке осталось менее 64 бит. В этом случае заполнение должно охватывать два блока - сначала положить 1 и заполнить остальные нулями, а затем создать 448-битный блок.

Второе предложение мне неясно. 64-битное кодирование входного размера в битах необходимо добавить после заполнения.


Обратите внимание, что вы пытаетесь воссоздать описание алгоритма буквально. Это не очень хорошая идея. Вам необходимо обработать блоки открытого текста, ведя подсчет количества битов или байтов, а затем выполнить кодирование заполнения и длины, когда указан конец потока . Вам нужен 512-битный буфер, метод update и final.

Создание хеша с использованием строки, представляющей двоичный файл, не очень хорошая идея. Вы должны обрабатывать байты и, возможно, слова внутри. Вам нужно только что-нибудь кодировать для целей отладки.

...