常見的數(shù)據(jù)校驗(yàn)方法
http://blog.csdn.net/ky_heart/article/details/53048692
原創(chuàng)2016年11月05日 23:12:38
常見的數(shù)據(jù)校驗(yàn)方法
1.??????校驗(yàn)是什么
校驗(yàn),是為保護(hù)數(shù)據(jù)的完整性,用一種指定的算法對(duì)原始數(shù)據(jù)計(jì)算出的一個(gè)校驗(yàn)值。當(dāng)接收方用同樣的算法再算一次校驗(yàn)值,如果兩次校驗(yàn)值一樣,表示數(shù)據(jù)完整。
2.??????最簡(jiǎn)單的校驗(yàn)
實(shí)現(xiàn)方法:將原始數(shù)據(jù)和待比較的數(shù)據(jù)直接進(jìn)行比較,看是否完全一樣。
特點(diǎn):最安全準(zhǔn)確效率最低
適用范圍:簡(jiǎn)單的數(shù)據(jù)量極小的通訊
3.?????? 奇偶校驗(yàn)
實(shí)現(xiàn)方法:在數(shù)據(jù)存儲(chǔ)和傳輸中,字節(jié)中額外增加一個(gè)比特位,用來傳送奇/偶校驗(yàn)位來檢驗(yàn)錯(cuò)誤。
奇校驗(yàn):所有傳送的數(shù)位(含字符的各數(shù)位和校驗(yàn)位)中,“1”的個(gè)數(shù)為奇數(shù),如:
1 0110,0101
0 0110,0001
偶校驗(yàn):所有傳送的數(shù)位(含字符的各數(shù)位和校驗(yàn)位)中,“1”的個(gè)數(shù)為偶數(shù),如:
1 0100,0101
0 0100,0001
特點(diǎn):能夠檢測(cè)出信息傳輸過程中的1位誤碼。
出現(xiàn)錯(cuò)誤后,不能進(jìn)行修改,只能要求重發(fā)。
簡(jiǎn)單,應(yīng)用范圍廣。
4.?????? CRC循環(huán)冗余校驗(yàn)
實(shí)現(xiàn)方法:利用除數(shù)以及余數(shù)的原理進(jìn)行錯(cuò)誤檢測(cè),將接收到的碼組進(jìn)行除法運(yùn)算,如果除盡,則說明傳輸無誤;如果未除盡,則表明傳輸出現(xiàn)差錯(cuò)。
生成CRC碼的基本原理:任意一個(gè)由二進(jìn)制位串組成的代碼都可以和一個(gè)系數(shù)僅為‘0’和‘1’取值的多項(xiàng)式一一對(duì)應(yīng)。例如:代碼1010111對(duì)應(yīng)的多項(xiàng)式為x6+x4+x2+x+1,而多項(xiàng)式為x5+x3+x2+x+1對(duì)應(yīng)的代碼101111。
CRC碼集選擇的原則:若設(shè)碼字長(zhǎng)度為N,信息字段為K位,校驗(yàn)字段為R位(N=K+R),則對(duì)于CRC碼集中的任一碼字,存在且僅存在一個(gè)R次多項(xiàng)式g(x),使得
V(x)=A(x)g(x)=xRm(x)+r(x);
其中:??? m(x)為K次信息多項(xiàng)式, r(x)為R-1次校驗(yàn)多項(xiàng)式,
g(x)稱為生成多項(xiàng)式:
g(x)=g0+g1x+g2x2+...+g(R-1)x(R-1)+gRxR
發(fā)送方通過指定的g(x)產(chǎn)生CRC碼字,接收方則通過該g(x)來驗(yàn)證收到的CRC碼字。
CRC校驗(yàn)碼軟件生成方法:
借助于多項(xiàng)式除法,其余數(shù)為校驗(yàn)字段。
例如:信息字段代碼為: 1011001;對(duì)應(yīng)m(x)=x6+x4+x3+1
假設(shè)生成多項(xiàng)式為:g(x)=x4+x3+1;則對(duì)應(yīng)g(x)的代碼為: 11001
x4m(x)=x10+x8+x7+x4對(duì)應(yīng)的代碼記為:10110010000;
采用多項(xiàng)式除法:? 得余數(shù)為: 1010???? (即校驗(yàn)字段為:1010)
發(fā)送方:發(fā)出的傳輸字段為:1 0 1 1 0 0 11 0 10
信息字段校驗(yàn)字段
接收方:使用相同的生成碼進(jìn)行校驗(yàn):接收到的字段/生成碼(二進(jìn)制除法)
如果能夠除盡,則正確。
特點(diǎn):信息字段和校驗(yàn)字段的長(zhǎng)度可以任意選定。
編碼和解碼方法簡(jiǎn)單,檢錯(cuò)和糾錯(cuò)能力強(qiáng),在通信領(lǐng)域廣泛地用于實(shí)現(xiàn)差錯(cuò)控制。
具體實(shí)現(xiàn)代碼見博客:http://blog.csdn.net/xiaoku
5.?????? bcc異或校驗(yàn)法
實(shí)現(xiàn)方法:將所有數(shù)據(jù)都和一個(gè)指定的初始值(通常是0)異或一次,所得結(jié)果為校驗(yàn)值。接收方收到數(shù)據(jù)后自己也計(jì)算一次異或和校驗(yàn)值,如果和收到的校驗(yàn)值一致就說明收到的數(shù)據(jù)是完整的。
特點(diǎn):應(yīng)用于很多基于串口的通訊方法。
6.md5校驗(yàn)和數(shù)字簽名
實(shí)現(xiàn)方法:主要有md5和des算法。
適用范圍:數(shù)據(jù)比較大或要求比較高的場(chǎng)合。如md5用于大量數(shù)據(jù)、文件校驗(yàn),des用于保密數(shù)據(jù)的校驗(yàn)(數(shù)字簽名)等等。
應(yīng)用例子:文件校驗(yàn)、銀行系統(tǒng)的交易數(shù)據(jù)
如客戶往我們數(shù)據(jù)中心同步一個(gè)文件,該文件使用MD5校驗(yàn),那么客戶在發(fā)送文件的同時(shí)會(huì)再發(fā)一個(gè)存有校驗(yàn)碼的文件,我們拿到該文件后做MD5運(yùn)算,得到的計(jì)算結(jié)果與客戶發(fā)送的校驗(yàn)碼相比較,如果一致則認(rèn)為客戶發(fā)送的文件沒有出錯(cuò),否則認(rèn)為文件出錯(cuò)需要重新發(fā)送。