MD5 Round Operations RFC1321 - PullRequest
       7

MD5 Round Operations RFC1321

0 голосов
/ 02 января 2019

Согласно этой документации функции md5, шаг 4 включает в себя раунды функций, где

Пусть [abcd k s i] обозначает операцию

a = b + ((a + F (b, c, d) + X [k] + T [i]) <<< s). </p>

Выполните следующие 16 операций.

Я не уверен, что символ "+" символизирует в этой операции, будь то сложение или побитовое И. Ранее в статье указывалось

Пусть символ «+» обозначает сложение слов (т.е. по модулю 2 ^ 32 добавление). Пусть X <<< s обозначает 32-битное значение, полученное циклически сдвиг (вращение) X влево на s битовых позиций. </p>

Я знаю, что [abcd] - это 32-битные слова, а T [i] - это число с плавающей запятой (ive преобразуется в 32-битное слово, а X [k] - один бит. Выполняя эту функцию с побитовым И, получая результат в конец функции - это всегда 32-битная строка FALSE, которая заставляет меня думать, что где-то идет не так.

Ответственный за код Python:

    # parse to bitarrays
    xb = bitarray(str(x))
    tb = bitarray(str(t))

    value = b & ((a & F(b,c,d) & xb & tb)) # value always turns false
    value = leftshift(value, s)
    return value

И скриншот с переменными часами, которые могут быть полезны. enter image description here

Заранее благодарен ТАК сообщество

1 Ответ

0 голосов
/ 02 января 2019

Когда в спецификации говорится + означает, что 32-битное сложение реализует +, используя 32-битное сложение вместо побитового and.

В случае сомнений вы можете видеть другие MD5 реализации .

...