复合CRC多项式



我正在尝试复合 2 个 CRC 多项式。我有一个消息,我使用一个多项式生成CRC。然后我对第一个CRC的结果进行CRC,以便得到第二个结果。有没有可能的方法可以一次性做到这一点?

例: 给定消息0xC和多项式0x17我计算出0xA的CRC。然后,我采用此结果和另一个多项式0x13并再次计算CRC,从而产生0xD结果。我正在尝试推导出一个新的多项式,该多项式给定消息0xC将产生0xD的结果。

我只是尝试在纸上工作,所以我没有任何代码,但有些代码应该看起来像这样:

def CRC(message, poly):
    #CRC implementation

a = CRC(0xC, 0x17)
#The value of a right now would be 0xA
b = CRC(a, 0x13)
#The value of b is 0xD right now

我正在尝试使用我的初始消息和单个函数调用获得相同的结果

b = CRC(0xC, ???)
#I would want the value of b after this call to be 0xD

这似乎是一个愚蠢的要求,但我觉得它很有帮助。 我尝试过应用简单的数学,特别是商余数定理,但我发现在有限域中乘法过于复杂。

我在最初的答案中误解了这个问题。我假设这是一个单一的半字节消息,因为第二个CRC只有一个半字节输入,即来自0x17的CRC。这可以使用包含 16 个条目的表来实现。使用 n 表示半字节,使用无携带和无借二进制数学,以及十六进制数:

crc = (((n*10)%17)*10)%13 = (((n*7)%17)*3)%13

我想知道这里的目标是否是处理多个半字节的消息。例如,假设消息是 {x y z},那么编码的消息将是

{x y z crc17{x y z} crc13{x y z}}

{x y z crc17{x y z} crc13{x y z crc17{x y z}}

最新更新