我正在尝试找到与以下结果配合使用的crc。字节字符串由2个字节组成(即0xCE1E),而crc是单个字节(即0x03)。
字节 crc CE1E 03 CE20 45 CE22 6F 0000 C0 0001 D4 FFFF 95
有人能帮忙吗?
我正在尝试找到与以下结果配合使用的crc。字节字符串由2个字节组成(即0xCE1E),而crc是单个字节(即0x03)。
字节 crc CE1E 03 CE20 45 CE22 6F 0000 C0 0001 D4 FFFF 95
有人能帮忙吗?
首先,4个十六进制位不是4个字节。由于您的所有示例都显示4个十六进制位(2个字节),因此我假设您指的是2个字节。
哈希值只有65,536种不同的值,以下是您需要执行的操作。
对0000到FFFF的所有65,536个值执行哈希函数。列出结果。那张表就是函数。它将输入值映射到输出值。
虽然较为简单,但它始终正确,不是非常大(65K字节),在完成计算后非常快速。
您不能很容易地反向工程哈希函数。好的哈希函数是使用所有输入比特以某种“公平”的方式的复杂状态机,因此仅相差几个比特的输入值的输出值明显不同。
如果将0000与0001、0002、0004、0008、0010、0020、0040、0080、0100、0200、0400、0800、1000、2000、4000和8000进行比较,您可能能够弄清楚每个位对哈希的贡献。但我觉得不太可能。
CRC是一种简单的除法,就像你在小学学习长除法一样,只不过加减被替换成了异或。因此,您需要在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的结果都是0。) 所以也许是(x+input) % p = crc。在你的情况下,x必须是c0。如果这是真的,那么(x+0001)%p必须是c1。看起来根本不是CRC。如果你决心并且相信答案是线性的,请制作一个可逆的零和一的矩阵,并解决由矩阵乘以输入得到的方程组。你需要更多的输入。
http://www.geocities.com/SiliconValley/Pines/8659/crc.htm#r2
以我的经验有限来看,您需要实现一个通用的循环冗余校验算法,并尝试使用几个多项式进行测试(首先尝试该文章中提到的“流行”多项式)。
编辑:进一步阅读后,似乎您还需要考虑反向多项式。