Обратный расчет CRC сообщения

Считайте, что у вас есть это сообщение (ab,cd,ef) и у вас есть ROHC (надежное сжатие заголовка) CRC8 полином e0,

C(x) = x^0 + x^1 + x^2 + x^8

Есть ли способ, которым я могу вычислить CRC для сообщения в обратном направлении, начиная с последнего байта, и получить те же результаты, как если бы я вычислял его для исходного сообщения?

1 ответ

Нет, это обычно невозможно для вашего полинома (100000111).

EG: 110100111/100000111 = 011010011
but: 111001011/xxxxxxxxx != 011010011 (in general)

Однако вы все равно можете проверить достоверность своего сообщения, если заранее знаете CRC.

EG: 110100111/100000111 = 01101001
    => message transmitted = 11010011 01101001
    => message received (reversed) = 10010110 11001011

then: 10010110 11001011/111000001 == 0
(where: 111000001 = reversed(100000111))

=> crc(reversed(11001011)) = crc(11010011) == reversed(10010110) = 01101001

Обратите внимание, что это верно только в том случае, если сообщение перевернуто BITEWISE.

IE: reversed(ABC) = reversed(101010111100) = 001111010101
= 3D5 = reversed(ABC) != CBA = 110010111010 != reversed(101010111100)

Так что будьте осторожны при реализации вашего алгоритма;-)

Другие вопросы по тегам