Прогнозирование будущего значения CRC - PullRequest
0 голосов
/ 04 декабря 2018

В следующем коде показан CRC32, используемый в прямом хешировании (где мы хэшируем один и тот же элемент несколько раз с постоянным контекстом):

In [1]: from zlib import crc32

In [2]: crc32('aaaa')
Out[2]: -1382488763

In [3]: crc32('aaaa',-1382488763)
Out[3]: -1081835450

In [4]: crc32('aaaa' * 2)
Out[4]: -1081835450

Мой вопрос таков: учитывая известную начальную CRC -1382488763 Можем ли мы предсказать значение прямого хэша, не зная исходного содержимого?Чтобы уточнить ... я могу получить -1081835450 только от -1382488763?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Да, вы можете, в некотором смысле.Существует только одно 4-байтовое значение: «AAAA», которое производит конкретную контрольную сумму.Таким образом, можно найти это значение , если вы знаете выходные данные - например, просто перебирая все возможные байтовые входы.Затем вы можете угадать следующий вывод, расширив вычисление CRC32, снова предоставив предыдущее сообщение.

Примечания:

  • Я предполагаю кодировку ASCII здесь;
  • CRC32 не является односторонним хэшем, так что вы можете вычислить информацию о входном сообщении, не возвращаясь к грубой силе;
  • Мне неясно, почему вы хотите повторить начальный вводсообщение, я надеюсь вы знаете :)
0 голосов
/ 04 декабря 2018

Нет.crc32() принимает начальный CRC, применяет к нему сообщение и получает полученный CRC.Вам нужно сообщение.

Если вы могли бы определить crc32('aaaa',-1382488763), не зная aaaa, то зачем функции crc32() вообще нужен первый аргумент?

Если вы хотитезнать, если вы можете вычислить CRC повторения сообщения, учитывая только CRC неповторенного сообщения, то нет.Однако если вы знаете CRC сообщения и длину сообщения, тогда да, вы можете вычислить CRC двух или более повторений этого сообщения, не зная самого сообщения.Как вы заметили в комментариях, это то, что делает crc32_combine() в zlib.

...