Прошу прощения за поднятие старой темы, просто появилась парочка глупых мыслишек. А нельзя ли попробовать ответить на ворос топикстартера используя определение CRC как остатка от деления одного полинома-сообщения на другой полином? Нет, я не предлагаю привлекать китайскую теорему об остатках или ещё что-нибудь в том же духе. Моя идея гораздо проще.
Если я не ошибаюсь, CRC32 для некоторого сообщения
можно посчитать как
,
. Тогда для конкатенации двух строк
и
, CRC32 будет вычисляться как-то так:
, то есть мы предварительно сдвигаем коэффициенты первого полинома, чтобы после сложения там поместилась вторая строка (
есть длина второй строки).
Вот я тут наткнулся на одну крайне разжеванную тему
Арифметика остатков и взял оттуда две формулки, которые решил применить к выражению для CRC конкатенации так, чтобы оно вычислялось из известных
и
. Неуверен в безошибочности выкладок (другие участники форума подобные вещи, наверное, в уме просто так проделывают), но конечный результат у меня получился таким:
Экспериментально не проверял (отчасти потому, что не совсем представляю себе как это реализовать), скорее всего не работает. :) Но тут важна сама идея, ведь CRC это же не какой-нибудь там криптографический хэш и такие вещи вполне возможны...
P.S.: Исходная задача точно решаема если одна из строк известна (лучше первая).