我正在尝试找到适用于以下结果的 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 是简单的除法,就像您在小学学习长手除法一样,只是加减法被替换为 XOR。因此,您需要做的是求解 GF(2) 中的以下方程:
CE1E % p = 03
CE20 % p = 45
CE22 % p = 6F
0000 % p = C0
0001 % p = D4
FFFF % p = 95
不存在 0000%p = c0 的多项式 p。(对于 p 的所有值,0 模 p 为 0。)所以也许它是 (x+input) % p = crc。在您的情况下,x 必须是 c0。如果这是真的,那么 (x+0001)%p 必须是 c1。看起来它根本不是CRC。如果您确定并且相信答案是线性的,请制作一个由 0 和 1 组成的可逆矩阵,并求解由矩阵乘以输入 = 输出得出的方程组。不过,您将需要更多输入。
假设它们是两个字节(16 位)的值,我在一些在线 CRC 生成器上尝试了一些,但没有得到你的结果。所以看起来它不是常用的CRC算法。
您对可能的算法有任何线索吗?或者这是一个家庭作业,你应该对 CRC 算法/参数进行逆向工程?
摘要:需要更多信息。
http://www.geocities.com/SiliconValley/Pines/8659/crc.htm#r2
在我没有经验的眼里,你必须实现一个通用的 crc 算法并用几个 polys 进行尝试(首先尝试该文章中提到的“流行”算法)。
编辑:进一步阅读后,您似乎也必须考虑反向多边形。