使用哪种算法来计算校验和?

Posted

技术标签:

【中文标题】使用哪种算法来计算校验和?【英文标题】:Which algorithm is used to calculate checksum? 【发布时间】:2015-12-09 09:52:30 【问题描述】:

我正在尝试破译用于几个 HVAC 控制器之间的 RS485 通信的协议。正如您在下面的列表中看到的那样,我能够识别单个消息。

00020003400012A9
00030103400012A7

00010303400012A7
2001030A400012010104FFFFFFFF7E

00010303400016A3
200103094000160C0C010400441C

000103074100000024A003ED
2001030A4100000024A0030895BA73

0001032A90020030000200310700013000020131070002300002023107060330000203310700043000FF053000FF1F
2001030290004A

00020003400012A9
00030103400012A7

00010302D10227
20010312D140200100002101000022010000230100002F

00020003400012A9
00030103400012A7

00010302D20226
20010302D240C8

00020003400012A9
00030103400012A7

00010302D10227
20010312D140200100002101000022010000230100002F

00020003400012A9
00030103400012A7

00010302D20226
20010302D240C8

00020003400012A9
00030103400012A7

00010302D20226
20010302D240C8

00020003400012A9
00030103400012A7

00010302D20226
20010302D240C8

00020003400012A9
00030103400012A7

00010302D20226
20010302D240C8

每一行包含一个完整的十六进制格式的消息。我认为最后一个字节(最后两个十六进制字符)是之前数据的校验和,但这只是我的猜测。

用什么算法来计算这个校验和?

【问题讨论】:

【参考方案1】:

我现在发现了算法。它只是总结数据并构建某种 2s 补码。这是一个例子:

data: 0x20010312D14020010000210100002201000023010000

binary sum: 1 1101 0001 (0x1D1)
last byte:    1101 1110 (0xD1)
invert:       0010 1110 (0x2E)
add 1:        0010 1111 (0x2F)
use only last byte of calculated CS

CS: 0x2F

【讨论】:

以上是关于使用哪种算法来计算校验和?的主要内容,如果未能解决你的问题,请参考以下文章

我应该使用啥校验和算法?

Hadoop IO操作之校验和

md5校验工具是干啥用的?

2.7校验和与核实

ip校验与计算

数据校验及校验和总结