checksum的計算和原理

2021-08-01 22:59:56 字數 790 閱讀 1412

unsigned short checksum(char *addr, int count)

if( count > 0 )//=1,說明count為奇數

sum += *addr;

while (sum>>16)//當和的高16位不為0,把高16位作為校驗和的一部分求和,

sum = (sum & 0xffff) + (sum >> 16);

return (short)~sum;

}/*****************************八位checksum*********************************/

char checksum(char *addr, int count)

while (sum>>8)

sum = (sum & 0xff) + (sum >> 8);

return (char)~sum;

}原理:

1、校驗和的計算:將緩衝區的資料中挨個數累加(x),然後取反輸出(~x)。

2、校驗:將緩衝區的資料和校驗和(~x)一起求校驗和,累加和(y(及取反輸出(~y)。y =緩衝區的資料累加(x(+校驗和(~x)=0xffff。~y=0。所以當結果為0,說明資料傳輸沒問題。

如果校驗和計算時高16位(xh)不等於零,(xh)+(xl)= z,新校驗和為~z。 校驗時,再次求校驗和 :先求和(xh)*2^16 +(xl)+ ~z= (xh)*2^16 +(xl)+ 0xffff - z =(xh)*2^16+(0xffff -(xh))=y.yh=xh,yl=(0xffff -(xh),yh+yl=0xffff.

檔案校驗和(checksum或Hash)計算工具

windows作業系統 1 certutil windows自帶的certutil工具 用法 certutil hashfile pathtofiletocheck hashalgorithm 引數 pathtofiletocheck 待計算校驗和的檔案 hashalgorithm hash演算法,...

網路資料報效驗和(checksum)的計算

在網路傳送的資料報為了保證傳送正確都含有效驗字段,ip arp tcp等每 個資料段都有自己的效驗和。效驗的計算並不複雜。把相應資料報段的所有資料看成乙個位元組陣列 把他們分成16bit一組 計算其和 ab cd e0 xy 計算採用迴圈進製,最高位的進製加到最低位,如果計算出的 xy 所有位都為1...

詳解IP首部效檢和 checksum

最近一段時間,對網路又開始追根溯源,最好的辦法就是開啟開源協議棧看乙個究竟,不求寫乙個完整的ip協議棧,但求通達解惑!眾所周知,ip頭定義如下 struct ipheader unsigned char ver hlen unsigned char tos unsigned short len un...