CRC也就是循環(huán)冗余校驗碼,是計算機網(wǎng)絡(luò)通信領(lǐng)域常用的校驗碼。循環(huán)冗余校驗碼包括一系列移位、相除等數(shù)據(jù)編碼規(guī)則,其算法原理、算法程序的設(shè)計與分析,都可以通過相應(yīng)的軟件編碼進行解決。
循環(huán)冗余校驗碼是利用軟件進行校驗的算法,因此其檢驗速度很快,校驗的誤碼率也較低,整個計算機網(wǎng)絡(luò)通信的信息傳輸速度很高。CRC差錯糾正控制法能夠有效減少通信線路的誤碼率,得到的通信數(shù)據(jù)傳輸信息更準(zhǔn)確。
在數(shù)據(jù)的傳輸過程中由于空間電磁環(huán)境復(fù)雜等原因,可能會產(chǎn)生誤碼,即某幾位數(shù)據(jù)0變?yōu)?,或1變?yōu)?,導(dǎo)致接收端得到錯誤的數(shù)據(jù)。為了降低誤碼率,通常對數(shù)據(jù)進行特定編碼,在收發(fā)端進行額外的驗證,使接收端能發(fā)現(xiàn)某些錯誤;
進而實現(xiàn)糾錯功能,常用的編碼方法有CRC-校驗碼、CRC-校驗碼、漢明碼、奇偶校驗法等。其中位循環(huán)冗余校驗簡稱CRC-校驗在性能和資源消耗兩方面都有較大的優(yōu)勢,因而,在無線電通信、SATA硬盤數(shù)據(jù)傳輸?shù)认到y(tǒng)中,CRC-校驗是最常用的檢錯手段之一。
CRC叫做循環(huán)冗余校驗,是檢驗發(fā)送數(shù)據(jù)是否正確的一種方法。比如你發(fā)過來的是0x這個數(shù)據(jù),要是發(fā)送過程中出現(xiàn)了干擾,變成了其他數(shù)據(jù)比如0x,這樣送到設(shè)備上會出問題的。所以MODBUS利用了一種方法,就是把每一個BYTE的數(shù)據(jù)和一個固定值(位數(shù)值)進行一次運算(循環(huán)的,比如上面的數(shù)據(jù)中運算完結(jié)果用在上運算,再往下以此類推),最后得到一個2BYTE的數(shù)值(位)。也就是經(jīng)過這一系列的運算,發(fā)送方和接收方算出來的CRC數(shù)值應(yīng)該相同的;如果傳送中數(shù)據(jù)的某一位或者某幾位出現(xiàn)了問題,那么運算出來的結(jié)果就會不一樣(并不是%,但是已經(jīng)很高了),那么這個數(shù)據(jù)就不能要了。懂了嗎?
檢測數(shù)據(jù)傳輸保存后出現(xiàn)的錯誤。循環(huán)冗余檢查是一種根據(jù)數(shù)據(jù)產(chǎn)生簡短固定位數(shù)校驗碼的散列函數(shù),主要用于檢測或校驗數(shù)據(jù)傳輸或者保存后出現(xiàn)的錯誤,生成的數(shù)字在傳輸或者存儲之前計算出來并附加到數(shù)據(jù)后面,然后接收方進行檢驗確定數(shù)據(jù)是否發(fā)生變化,循環(huán)冗余校驗的值都是位的整數(shù),由于該函數(shù)易于用二進制的計算機硬件使用,容易進行數(shù)學(xué)分析,并尤其善于檢測傳輸通道干擾引起的錯誤,因此獲得廣泛應(yīng)用。
循環(huán)冗余碼CRC(Cyclic Redundancy Code)又稱多項式碼.
任何一個由二進制數(shù)位串組成的代碼,都可以惟一地與一個只含有0和1兩個系數(shù)的多項式建立一一對應(yīng)的關(guān)系.例如,代碼對應(yīng)的多項式為X6+X4+X2+X+1,多項式X5+X3+X2+X+1對應(yīng)的代碼為.
CRC碼在發(fā)送端編碼和接收端檢驗時,都可以利用事先約定的生成多項式G(X)來得到.設(shè)G(X)中最高位X的次方為Xr,信息位為K(X);則CRC碼=Xr乘以K(X)再除以G(X).

比如:信息位K(X)=X6+X4+X3+1既,生成多項式G(X)=既X4+X3+1(可得Xr=X4)
則CRC碼=X4* (X6+X4+X3+1)/(X4+X3+1)=X+X8+X7+X4/(X4+X3+1)=/
得到的余數(shù)就是CRC碼
注:以上除法用的是模2除法,是一種不考慮減法借位的運算.既0-0=0,0-1=1,1-0=1,1-1=0
—————————————————————————————
重新在網(wǎng)站做了圖解,有疑問的話直接在網(wǎng)站留言吧
CRC循環(huán)校驗是什么
CRC是什么東西呢?其實我們大家都不應(yīng)該會對它陌生,回憶一下?你用過RAR和ZIP等壓縮軟件嗎?它們是不是常常會給你一個惱人的“CRC校驗錯誤”信息呢?我想你應(yīng)該明白了吧,CRC就是塊數(shù)據(jù)的計算值,它的全稱是“Cyclic Redundancy Check”,中文名是“循環(huán)冗余碼”,“CRC校驗”就是“循環(huán)冗余校驗”。(哇,真拗口,希望大家不要當(dāng)我是唐僧,呵呵。^_^)
CRC有什么用呢?它的應(yīng)用范圍很廣泛,最常見的就是在網(wǎng)絡(luò)傳輸中進行信息的校對。其實我們大可以把它應(yīng)用到軟件保護中去,因為它的計算是非常非常非常嚴(yán)格的。嚴(yán)格到什么程度呢?你的程序只要被改動了一個字節(jié)(甚至只是大小寫的改動),它的值就會跟原來的不同。Hoho,是不是很厲害呢?所以只要給你的“原”程序計算好CRC值,儲存在某個地方,然后在程序中隨機地再對文件進行CRC校驗,接著跟第一次生成并保存好的CRC值進行比較,如果相等的話就說明你的程序沒有被修改/破解過,如果不等的話,那么很可能你的程序遭到了病毒的感染,或者被Cracker用進制工具暴力破解過了。
參考資料:矛與盾的較量(2)——CRC原理篇%%老羅的繽紛天地.htm