常見的數據校驗方法算法
1. 校驗是什麼安全
校驗,是爲保護數據的完整性,用一種指定的算法對原始數據計算出的一個校驗值。當接收方用一樣的算法再算一次校驗值,若是兩次校驗值同樣,表示數據完整。編碼
2. 最簡單的校驗.net
實現方法:將原始數據和待比較的數據直接進行比較,看是否徹底同樣。blog
特色:最安全準確效率最低md5
適用範圍:簡單的數據量極小的通信get
3. 奇偶校驗同步
實現方法:在數據存儲和傳輸中,字節中額外增長一個比特位,用來傳送奇/偶校驗位來檢驗錯誤。博客
奇校驗:全部傳送的數位(含字符的各數位和校驗位)中,「1」的個數爲奇數,如:效率
1 0110,0101
0 0110,0001
偶校驗:全部傳送的數位(含字符的各數位和校驗位)中,「1」的個數爲偶數,如:
1 0100,0101
0 0100,0001
特色:可以檢測出信息傳輸過程當中的1位誤碼。
出現錯誤後,不能進行修改,只能要求重發。
簡單,應用範圍廣。
4. CRC循環冗餘校驗
實現方法:利用除數以及餘數的原理進行錯誤檢測,將接收到的碼組進行除法運算
,若是除盡,則說明傳輸無誤;若是未除盡,則代表傳輸出現差錯。
生成CRC碼的基本原理:任意一個由二進制位串組成的代碼均可以和一個係數僅爲‘0’和‘1’取值的多項式一一對應。例如:代碼1010111對應的多項式爲x6+x4+x2+x+1,而多項式爲x5+x3+x2+x+1對應的代碼101111。
CRC碼集選擇的原則:若設碼字長度爲N,信息字段爲K位,校驗字段爲R位(N=K+R),則對於CRC碼集中的任一碼字,存在且僅存在一個R次多項式g(x),使得
V(x)=A(x)g(x)=xRm(x)+r(x);
其中: m(x)爲K次信息多項式, r(x)爲R-1次校驗多項式,
g(x)稱爲生成多項式:
g(x)=g0+g1x+g2x2+...+g(R-1)x(R-1)+gRxR
發送方經過指定的g(x)產生CRC碼字,接收方則經過該g(x)來驗證收到的CRC碼字。
CRC校驗碼軟件生成方法:
藉助於多項式除法,其他數爲校驗字段。
例如:信息字段代碼爲: 1011001;對應m(x)=x6+x4+x3+1
假設生成多項式爲:g(x)=x4+x3+1;則對應g(x)的代碼爲: 11001
x4m(x)=x10+x8+x7+x4 對應的代碼記爲:10110010000;
採用多項式除法: 得餘數爲: 1010 (即校驗字段爲:1010)
發送方:發出的傳輸字段爲: 1 0 1 1 0 0 11 0 10
信息字段 校驗字段
接收方:使用相同的生成碼進行校驗:接收到的字段/生成碼(二進制除法)
若是可以除盡,則正確。
特色:信息字段和校驗字段的長度能夠任意選定。
編碼和解碼方法簡單,檢錯和糾錯能力強,在通訊領域普遍地用於實現差錯控制。
具體實現代碼見博客:http://blog.csdn.net/xiaoku
5. bcc異或校驗法
實現方法:將全部數據都和一個指定的初始值(一般是0)異或一次,所得結果爲校驗值。接收方收到數據後本身也計算一次異或和校驗值,若是和收到的校驗值一致就說明收到的數據是完整的。
特色:應用於不少基於串口的通信方法。
6. md5校驗和數字簽名
實現方法:主要有md5和des算法。
適用範圍:數據比較大或要求比較高的場合。如md5用於大量數據、文件校驗,des用於保密數據的校驗(數字簽名)等等。
應用例子:文件校驗、銀行系統的交易數據
如客戶往咱們數據中心同步一個文件,該文件使用MD5校驗,那麼客戶在發送文件的同時會再發一個存有校驗碼的文件,咱們拿到該文件後作MD5運算,獲得的計算結果與客戶發送的校驗碼相比較,若是一致則認爲客戶發送的文件沒有出錯,不然認爲文件出錯須要從新發送。