Функция CRC без зависимости порядка - PullRequest
1 голос
/ 21 апреля 2010

Мне нужен механизм CRC для вычисления CRC числа строк, чтобы при заданных двух строках A и B сумма crc (A) + crc (B) == crc (A + B) .

P.S. XOR слишком слабый - алгоритм не должен быть тривиальным для обратного инжиниринга.

Ответы [ 3 ]

3 голосов
/ 21 апреля 2010

Принимая ваше обязательное условие, с + означает конкатенацию строк в RHS и добавление целых чисел в LHS, контрольная сумма любой строки будет суммой контрольных сумм ее отдельных символов. Все такие контрольные суммы изоморфны [*], единственными настраиваемыми параметрами являются значения, которые вы присваиваете каждому отдельному символу.

Если XOR слишком слаб, то я сомневаюсь, что любая такая линейная контрольная сумма будет достаточно сильной.

Если + означает что-либо еще в вашем необходимом состоянии, возможно, вы могли бы указать, что ...

[*] Ну, что-то морфическое.

1 голос
/ 22 апреля 2010

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

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

1 голос
/ 21 апреля 2010

Я не думаю, что какие-либо контрольные суммы могли бы заполнить это условие.

Обычно размер (CRC (A)) == const (кодовый домен CRC является ограниченным набором, const == size (max_checksum)).

Так что, если у вас есть сообщение B, для которого CRC (B) == max_checksum, то для любого другого размера сообщения (CRC (B)) + размер (CRC (C))> const, (из CRC (B) + CRC (C)> max_checksum).

Или, иначе говоря, нет функции CRC, которая удовлетворяет требованию.

EDIT:

Однако, если вы имели в виду, что хотите иметь возможность определять CRC двух сообщений вместе, зная CRC обоих отдельных сообщений, да, возможно, это используется, например, rsync и называется переходящий хэш .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...