Fletcher’s Checksum
Fletcher校验和是一种错误检测技术,它使用两个校验和来确定通过网络通道传输的消息中的单位错误。这是一种由John G. Fletcher于1970年代在美国劳伦斯利弗莫尔实验室(Lawrence Livermore Labs)发明的分组代码技术。
校验和是基于要传输并附加到数据的数据块中的数据值创建的。当接收器获得此数据时,将重新计算校验和并将其与现有校验和进行比较。不匹配表示错误。
此方法的错误检测功能与循环冗余校验(CRC)几乎相同,但所需的计算量却少得多。
Fletcher的校验和的版本
Fletcher的校验和有三种流行的算法:
- Fletcher – 16:数据字分为8位块。然后,计算两个8位校验和并将其附加以形成16位Fletcher校验和。
- Fletcher – 32:数据字分为16位块。计算两个16位校验和,并将它们附加起来以形成32位Fletcher校验和。
- Fletcher – 64:数据字分为32位块。计算两个32位校验和,并将其附加以形成32位Fletcher校验和。
Fletcher校验和的计算算法
1 2 | INPUT : data blocks of equal sizes, ??1,??2………… ???? OUTPUT : two checksums, ???????????????1 and ???????????????2, of 1 byte each |
步骤1)初始化部分和,以及和?? 1 sub> = 0和?? 2 sub> = 0
步骤2)对于每个数据块,?? ?? sub>
- 一世。将?? ?? sub>添加到?? 1 sub>
- ii。将?? 1 sub>的更新值添加到?? 2 sub>
步骤3)计算校验和,
- ??????????????? 1 sub> = ?? 1 sub> ?????? 256和??????????????? 2 sub> = ?? 2 sub> ?????? 256
步骤4)附加校验和,??????????????? 1 sub>和??????????????? 2 < / sub>,到数据块?? 1 sub>,?? 2 sub>…………?? ?? sub>
Fletcher校验和的计算示例
假设有五个数据块163、200、19、74和88。计算为-
1 2 3 4 5 6 7 | Block Number Data Block c<sub>1</sub> c<sub>2</sub> - - 0 0 1 163 163 163 2 200 363 526 3 19 382 908 4 74 456 1364 5 88 544 1908 |
??????????????? 1 sub> = 544 ?????? 256 = 34
??????????????? 2 sub> = 1908 ?????? 256 = 123