棘手的crc算法

时间:2008-11-12 10:39:31

标签: crc

我正在尝试找到符合以下结果的crc。字节字符串由2个字节组成(即0xCE1E),crc是单个字节(即0x03)

byte crc
CE1E 03
CE20 45
CE22 6F
0000 C0
0001 D4
FFFF 95

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:4)

首先,4个十六进制数字不是4个字节。由于您的所有示例都显示4个十六进制数字 - 2个字节 - 我假设您的意思是2个字节。

只有65,536个不同的哈希值,这就是你所做的。

对从0000到FFFF的所有65,536个值执行散列函数。列出结果。该表该函数。它将输入值映射到输出值。

虽然很蹩脚,但它总是正确的,它不是非常大(65K字节),并且在你完成计算后它真的很快。

您无法轻松地对哈希函数进行反向工程。好的是复杂的状态机,它们以某种“公平”的方式使用所有输入位,因此输出值对于仅相差几位的输入值而言是显着不同的。

如果你将0000与0001,0002,0000,0008,0010,0020,0040,0080,0100,0200,0400,0800,1000,2000,4000和8000进行比较,你或许可以弄清楚每一位有助于哈希。但我对此表示怀疑。

答案 1 :(得分:2)

假设它们是两个字节(16位)的值,我在一些在线CRC生成器上尝试了一些,但没有得到你的结果。所以看起来它不是常用的CRC算法。

您对可能的算法有任何线索吗?或者这是一项家庭作业,您应该对CRC算法/参数进行逆向工程吗?

摘要:需要更多信息。

答案 2 :(得分:2)

CRC只是简单划分,就像你在小学学习长手划分一样,除了用XOR代替加法和减法。所以你需要做的是解决GF(2)中的以下等式:

CE1E % p = 03
CE20 % p = 45
CE22 % p = 6F
0000 % p = C0
0001 % p = D4
FFFF % p = 95

没有多项式p,0000%p = c0。 (对于p的所有值,0模p为0。)所以也许它是(x +输入)%p = crc。在您的情况下,x必须是c0。如果这是真的,那么(x + 0001)%p必须是c1。看起来它根本不是CRC。如果您确定并且您认为答案是线性的,则制作一个零和一个可逆的矩阵,并求解由矩阵乘以输入=输出产生的方程组。但是,你需要更多的输入。

答案 3 :(得分:0)

http://www.geocities.com/SiliconValley/Pines/8659/crc.htm#r2

在我没有经验的眼睛看来,你必须实现一般的crc算法并尝试使用几个多边形(尝试首先在该文章中提到的“流行”算法)。

编辑:进一步阅读后,您似乎也必须考虑反向多边形。