0

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

示例:给定消息 0xC 和多项式 0x17,我计算 CRC 为 0xA。然后我取这个结果和另一个多项式 0x13 并再次计算产生结果 0xD 的 CRC。我试图推导一个新的多项式,给定消息 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

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

4

1 回答 1

0

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

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

我想知道是否相反,这里的目标是处理不止一个半字节的消息。例如,假设消息是 {xyz},那么编码的消息将是

{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}}
于 2019-11-21T18:16:33.213 回答