证明CRC的线性

时间:2014-05-09 10:42:08

标签: crc

我知道CRC是一个线性函数,这意味着CRC(x xor y)= CRC(x)xor CRC(y),但我不知道如何为CRC证明这个属性。

有没有人有任何想法?

非常感谢!

1 个答案:

答案 0 :(得分:2)

这通常不正确。只有具有零字符串的CRC始终为零的属性的CRC才适用。 (该属性很容易从您的等式中得出。)大多数CRC具有前处理和后处理,预处理的目的之一是确保情况。您不希望检查算法无法区分零串中有多少个零。类似地,对于这样的检查算法,您可以在消息中添加任意数量的零,而不会更改检查值。

A"纯粹"没有预处理或后处理的CRC 具有您定义的线性属性。通过查看CRC寄存器实现对单个位执行的操作以及如果反转该位将如何更改,可以看出这一点。寄存器一端的一位从寄给另一端的位确定,确定寄存器是否与多项式字相对应。如果该位被反转,则反转该决定。因此,这两个CRC的异或是多项式字。如果将一个位输出到初始化为零的寄存器的那一端(这是无预处理很重要的位置),则得到多项式字。因此,异或消息的CRC等于CRC的异或。然后通过一次一位地应用该发现将其扩展到所有位。