文檔:網絡通訊包結構(crc校驗,加解密)


一直想把這個流程整理一下。

包結構:

對(datacrc+protoID+dataSize)組成的byte[] 進行crc計算而得到

對(數據內容)進行crc計算而得到

協議號

數據內容的字節長度

數據內容

字段

headcrc

datacrc

protoID

dataSize

data

類型

uint

uint

ushort

ushort

byte[]

字節數

4

4

2

2

dataSize

 

  1. crc校驗

問:TCP協議中,底層做了校驗,那通信時我們還有必要再進行有CRC或者其他校驗嗎?

 

答:tcp 是可靠的, 就是有重傳, 校驗, 有序等保證. 在字節流層次, 你不用驗證了.

但是協議層可靠不代表應用層可靠, 應用層數據校驗只能自己做CRC/MD5/SHA1

因為tcp是基於流的,一個報文可能分多個包發送,你自己要要驗證報文的完整性

TCP 的校驗只能保證物理電路上如果出錯, 可以發現並通過重傳來修正. 但是對人為的對包惡意的修改是無法校驗的。如果是安全要求比較高的地方, 最好還是自己再校驗下.

 

問:為什么選crc ?

 

答:CRC(Cyclic Redundancy Check,循環冗余校驗)

其校驗准確度較之普通的奇偶校驗、校驗和等方法更高,當然計算也略微復雜;

較之MD5、SHA1等算法,CRC安全性和准確度方面又略顯不足,

但計算較之這兩者明顯簡單,效率更高。

所以如果僅僅針對網絡數據的一致性校驗,即收發端數據的是否一致

(因為在Socket編程里,單次收到數據的長度和發送數據的長度即使在阻塞模式下,也不一定是相同的,這個依賴於網絡環境,雖然TCP協議保證了數據的完整性和一致性,但像人為對數據進行了分片的這種情況,在收到數據時視情況還是有必要進行一下校驗),

針對這種校驗要求,CRC32是明顯足夠,也不會帶來很大的計算負擔。

 

2.加密,解密 

介紹:

不可逆加密:md5 ,sha1,加密后就不能解密,只能用於存儲密碼和校驗文件變動,不能用網絡通訊

可逆對稱加密DES3DESAES

可逆非對稱加密 RSA

選定:對稱加密:DES  非對稱加密:RSA

.net有封裝好的,DESCryptoServiceProvider, RSACryptoServiceProvider

 

流程:

一般流程為:先用非對稱加密去加密對稱加密的密鑰(對稱加密的密鑰比較短,可視為不怎么耗時,然后再用對稱加密去加密數據。

也就是說:

客戶端用RSA生成公鑰和私鑰,發送公鑰給服務器,服務器用收的公鑰對3DES的key進行加密后,發還給客戶端,客戶端用私鑰進行解密得到3DES的key,之后就可以用此key來進行加密解密。

 

3.數據內容形式:json, protobuf-net, protobuf-java, pbc, pb-lua-gen, sproto

選定:Client:pbc   Server: protobuf-java (我的服務器是java寫的)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM