2012-04-23 122 views
1

我想通过简单地将它们连接在一起在网络上发送几个数据块,我希望能够使用校验和来验证一切都已经完成(这主要是作为防御检查反对错误,不是因为我看到或期望实际的低级别数据损坏)。所以我正在寻找一个校验和算法,它可以让我从部件的校验和中计算整个校验和。什么校验和技术会让我从它的部件的校验和中计算整个校验和?

像我认为会工作的技术的一个简单的例子就是将每个块的每个字节视为一个整数,并将所有这些整数相加(当然,这不会检测到缺少的零字节)。另一种方法是计算每个块的长度(当然,这不会检测到不会导致净插入或删除的数据更改)。另一种方法是将所有字节异或,但是这只能生成1个字节的校验和(我可以一次取4个字节,并对每个单元进行异或运算,但如果块长度不相等,四倍的倍数,我不得不陷入混乱,我认为这可能会消除简单连接不同块的能力)。

所以,我正在寻找更严重的校验和或哈希算法,它仍然可以让我轻松地计算给定每个块的校验和的几个连接块的校验和。有没有存在?

+2

[Incremental Checksums]的可能重复(http://stackoverflow.com/questions/1173481/incremental-checksums) – gsteff 2012-04-23 00:37:02

回答

0

通过TCP正确传输消息需要一个协议。该协议必须定义消息的开始,结束或优选两个。这意味着你将永远知道消息的长度。如果你的协议在开始处设置了长度,在消息结尾处设置了整数校验和,则会检测到缺少零字节,因为传输的校验和将从流中错误的字节中恢复,因此平均而言将是错误的65535超过65536.