我可以使用哪些方法来分析和猜测4位校验和算法?

5

[背景故事]

我正在使用一个五年历史的用户识别系统,尝试将ID添加到数据库中。我的问题是读取ID号码的系统需要某种校验和,但现在没有人知道它是如何工作的。

我可以访问已有正确校验和的现有ID列表。由于校验和只有16个可能的值,所以我可以创建任何我想要的ID,并将其通过认证系统最多运行16次,直到获得正确的校验和(但这非常耗时)。

[问题]

我可以采用哪些方法来帮助猜测用于某些数据的校验和算法?我已经尝试了一些简单的方法,例如异或和求和,但这些方法都没有起作用。

因此,我的问题是:如果我有像这样的十六进制数据:

data        checksum
00029921    1
00013481    B
00026001    3
00004541    8

我该使用哪些方法来确定使用了什么类型的校验和?例如,我应该尝试顺序数字,如00029921、00029922、00029923等,还是00029911、00029921、00029931等?如果我这样做,那么在变化的校验和中应该寻找什么模式?

同样地,比较交换的数字对于校验和是否有用?例如,00013481和00031481。

还有其他什么可以告诉我一些有用的信息吗?例如反转一个位或者一个十六进制数?

我假设这将是一种常见的校验和算法,但我不知道从哪里开始测试。我阅读了以下链接,但我不确定是否可以将其应用于我的情况,因为我不认为我的情况是CRC。

stackoverflow.com/questions/149617/how-could-i-guess-a-checksum-algorithm stackoverflow.com/questions/2896753/find-the-algorithm-that-generates-the-checksum cosc.canterbury.ac.nz/greg.ewing/essays/CRC-Reverse-Engineering.html

[答案]

我现在已经下载了一个更大的数据列表,结果比我预期的要简单,但为了完整起见,这是我所做的。

数据:

00024901 A
00024911 B
00024921 C
00024931 D
00042811 A
00042871 0
00042881 1
00042891 2
00042901 A
00042921 C
00042961 0
00042971 1
00042981 2
00043021 4
00043031 5
00043041 6
00043051 7
00043061 8
00043071 9
00043081 A
00043101 3
00043111 4
00043121 5
00043141 7
00043151 8
00043161 9
00043171 A
00044291 E

通过这些,我可以看到当一个值增加了一个值时,校验和也会增加相同的值,例如:

00024901 A
00024911 B

此外,两个数字交换不会改变校验和:

00024901 A
00042901 A

这意味着多项式值(至少对于这两个位置)必须相同。

最后,00000000的校验和为A,所以我计算了数字之和加上A模16:
( (Σxi) +0xA )mod16
并且这对于我所有的值都是匹配的。为了检查我的数据中从未更改的前3位没有任何问题,我按照Eric的建议编造并测试了一些数字,这些数字也适用于这种方法!


3
你能否发布更多数据,比如一些带有校验和的连续数字? - Matti Virkkunen
1
00000000的校验和是多少? - James
Matti- 是的,我稍后会从数据库中获取更多(连续)数字。 James - 如果可能的话,我试图避免编造大量数字,因为获取校验和需要一些时间,但是00000000可能是一个非常好的起点! - Ed.C
1个回答

9

我看到许多校验和都是基于数字位置的简单加权值。例如,如果权重为3、5、7,则校验和可能为3*c[0] + 5*c[1] + 7*c[2],然后对结果进行模10运算。(在您的情况下,模16,因为您有4位校验和)

为了检查是否可能是这种情况,建议您将一些简单的值输入系统以获得答案:

1000000 = ?
0100000 = ?
0010000 = ?

如果基于位置有简单权重,这可能会显示出来。即使算法不同,输入良好、简单的值并寻找模式也可能很有启发性。正如Matti所建议的,您/我们可能需要查看更多样本才能解码模式。

是的,这看起来比我的建议更好!今天我可能没有机会向系统输入任何新数字,但明天我会尝试一下。谢谢。 - Ed.C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接