C#中实现累加校验和计算和校验

C#中实现累加校验和计算和校验,第1张

如果必须加入一种方法来校验协议数据,累加校验不失为一种好的方案。MD5计算出的Hash太长了,校验和不过1或2个字节,当然MD5的安全性也不是校验和能比的。

1.将发送的进行检验和运算的数据分成若干个16位的位串,每个位串看成一个 二进制数 ,这里并不管 字符串 代表什么,是整数、浮点数还是位图都无所谓。

2.将 IP 、 UDP 或 TCP 的PDU首部中的检验和字段置为0,该字段也参与检验和运算。

3.对这些16位的二进制数进行1的补码和(one's complement sum)运算,累加的结果再取反码即生成了检验码。将检验码放入检验和字段中。

其中1的补码和运算,即带循环进位(end round carry)的加法,最高位有进位应循环进到最低位。反码即二进制各位取反,如0111的反码为1000。

1.接收方将接收的数据(包括检验和字段)按发送方的同样的方法进行1的 补码 和运算,累加的结果再取反码。

2.校验,如果上步的结果为0,表示传输正确;否则,说明传输有差错。

返回值是追加了校验和的原始字节数组。

DoSumCheck的参数就是原字节数组在尾部加上了校验和,如果数据正确运算结果就为00。

调用演示:

运行结果:

用位运算按位与得出校验数,参考代码如下:

#include<stdio.h>

int main()

{

char str[101]

int i,sum

gets(str)

i=sum=0

while(str[i]!=0)

sum+=str[i++]

printf("%d",sum&(0x0FF))

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11938335.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存