强奸久久久久久久|草草浮力在线影院|手机成人无码av|亚洲精品狼友视频|国产国模精品一区|久久成人中文字幕|超碰在线视屏免费|玖玖欧洲一区二区|欧美精品无码一区|日韩无遮一区二区

首頁 > 產(chǎn)品 > 經(jīng)驗(yàn) > crc32校驗(yàn),JAVA CRC32校驗(yàn)問題

crc32校驗(yàn),JAVA CRC32校驗(yàn)問題

來源:整理 時(shí)間:2025-01-29 18:47:12 編輯:智能門戶 手機(jī)版

本文目錄一覽

1,JAVA CRC32校驗(yàn)問題

校驗(yàn)的雙方是自己算出來的數(shù)和發(fā)布方公布的數(shù)做對比。你需要預(yù)先知道“發(fā)布方發(fā)布的效驗(yàn)碼”或者“可能發(fā)生錯(cuò)誤之前(比如傳輸之前)自己計(jì)算的效驗(yàn)碼”然后if(crc.getValue()==official_crc) //一致,數(shù)據(jù)完整}else //不一致,數(shù)據(jù)不完整}

JAVA CRC32校驗(yàn)問題

2,計(jì)算機(jī)文件的32位循環(huán)冗余校驗(yàn)和CRC32是什么東西

比如A給B發(fā)文件fA發(fā)的文件為afB收到的文件為bf如何判斷af==bf呢,也就是文件發(fā)送成功呢令文件af與一個(gè)數(shù)對應(yīng),bf與另一個(gè)數(shù)對應(yīng) 只要兩個(gè)數(shù)相同 那么af==bf,文件發(fā)送成功CRC32就是將文件對應(yīng)為一個(gè)數(shù)的一種算法
我是來看評論的

計(jì)算機(jī)文件的32位循環(huán)冗余校驗(yàn)和CRC32是什么東西

3,java crc32校驗(yàn) 數(shù)據(jù)發(fā)送前如何添加校驗(yàn)位

b是需要檢驗(yàn)的數(shù)據(jù)。getvalue是8位校驗(yàn)碼,string類型??碼pi只有快是幀封裝802.3么?
校驗(yàn)的雙方是自己算出來的數(shù)和發(fā)布方公布的數(shù)做對比。你需要預(yù)先知道“發(fā)布方發(fā)布的效驗(yàn)碼”或者“可能發(fā)生錯(cuò)誤之前(比如傳輸之前)自己計(jì)算的效驗(yàn)碼”然后if(crc.getvalue()==official_crc) //一致,數(shù)據(jù)完整}else //不一致,數(shù)據(jù)不完整}

java crc32校驗(yàn) 數(shù)據(jù)發(fā)送前如何添加校驗(yàn)位

4,Java中用crc32對數(shù)組進(jìn)行校驗(yàn)

byte b[]=CRC32 c=new CRC32()c.update(b);System.out.print(c.getValue());//打印crc32的校驗(yàn)值
校驗(yàn)的雙方是自己算出來的數(shù)和發(fā)布方公布的數(shù)做對比。你需要預(yù)先知道“發(fā)布方發(fā)布的效驗(yàn)碼”或者“可能發(fā)生錯(cuò)誤之前(比如傳輸之前)自己計(jì)算的效驗(yàn)碼”然后if(crc.getvalue()==official_crc) //一致,數(shù)據(jù)完整}else //不一致,數(shù)據(jù)不完整}

5,在Java中用crc32對數(shù)組進(jìn)行校驗(yàn)

java標(biāo)準(zhǔn)庫中有啊?。RC32 crc32 = new CRC32();byte[] data = new byte[128];for(byte i=0;i<data.length;i++) data[i] = i;}crc32.update(data);System.out.println(crc32.getValue());
byte b[]=crc32 c=new crc32()c.update(b);system.out.print(c.getvalue());//打印crc32的校驗(yàn)值

6,什么是CRC32校驗(yàn)

CRC32算法學(xué)習(xí)筆記以及如何用java實(shí)現(xiàn) CRC32算法學(xué)習(xí)筆記以及如何用java實(shí)現(xiàn) 一:說明 論壇上關(guān)于CRC32校驗(yàn)算法的詳細(xì)介紹不多。前幾天偶爾看到Ross N. Williams的文章,總算把CRC32算法的來龍去脈搞清楚了。本來想把原文翻譯出來,但是時(shí)間參促,只好把自己的一些學(xué)習(xí)心得寫出。這樣大家可以更快的了解CRC32的主要思想。由于水平有限,還懇請大家指正。原文可以訪問:http://www.repairfaq.org/filipg/LINK/F_crc_v31.html 。 二:基本概念及相關(guān)介紹 2.1 什么是CRC 在遠(yuǎn)距離數(shù)據(jù)通信中,為確保高效而無差錯(cuò)地傳送數(shù)據(jù),必須對數(shù)據(jù)進(jìn)行校驗(yàn)即差錯(cuò)控制。循環(huán)冗余校驗(yàn)CRC(Cyclic Redundancy Check/Code)是對一個(gè)傳送數(shù)據(jù)塊進(jìn)行校驗(yàn),是一種高效的差錯(cuò)控制方法。 CRC校驗(yàn)采用多項(xiàng)式編碼方法。多項(xiàng)式乘除法運(yùn)算過程與普通代數(shù)多項(xiàng)式的乘除法相同。多項(xiàng)式的加減法運(yùn)算以2為模,加減時(shí)不進(jìn),錯(cuò)位,如同邏輯異或運(yùn)算。 2.2 CRC的運(yùn)算規(guī)則 CRC加法運(yùn)算規(guī)則:0+0=0 0+1=1 1+0=1 1+1=0 (注意:沒有進(jìn)位) CRC減法運(yùn)算規(guī)則: 0-0=0 0-1=1 1-0=1 1-1=0 CRC乘法運(yùn)算規(guī)則: 0*0=0 0*1=0 1*0=0 1*1=1 CRC除法運(yùn)算規(guī)則: 1100001010 (注意:我們并不關(guān)心商是多少。) _______________ 10011 ) 11010110110000 10011,,.,,.... -----,,.,,.... 10011,.,,.... 10011,.,,.... -----,.,,.... 00001.,,.... 00000.,,.... -----.,,.... 00010,,.... 00000,,.... -----,,.... 00101,.... 00000,.... -----,.... 01011.... 00000.... -----.... 10110... 10011... -----... 01010.. 00000.. -----.. 10100. 10011. -----. 01110 00000 ----- 1110 = 余數(shù) 2.3 如何生成CRC校驗(yàn)碼 (1) 設(shè)G(X)為W階,在數(shù)據(jù)塊末尾添加W個(gè)0,使數(shù)據(jù)塊為M+ W位,則相應(yīng)的多項(xiàng)式為XrM(X); (2) 以2為模,用對應(yīng)于G(X)的位串去除對應(yīng)于XrM(X)的位串,求得余數(shù)位串; (3) 以2為模,從對應(yīng)于XrM(X)的位串中減去余數(shù)位串,結(jié)果就是為數(shù)據(jù)塊生成的帶足夠校驗(yàn)信息的CRC校驗(yàn)碼位串。 2.4 可能我們會問那如何選擇G(x) 可以說選擇G(x)不是一件很容易的事。一般我們都使用已經(jīng)被大量的數(shù)據(jù),時(shí)間檢驗(yàn)過的,正確的,高效的,生成多項(xiàng)式。一般有以下這些: 16 bits: (16,12,5,0) [X25 standard] (16,15,2,0) ["CRC-16"] 32 bits: (32,26,23,22,16,12,11,10,8,7,5,4,2,1,0) [Ethernet] 三: 如何用軟件實(shí)現(xiàn)CRC算法 現(xiàn)在我們主要問題就是如何實(shí)現(xiàn)CRC校驗(yàn),編碼和解碼。用硬件實(shí)現(xiàn)目前是不可能的,我們主要考慮用軟件實(shí)現(xiàn)的方法。 以下是對作者的原文的翻譯: 我們假設(shè)有一個(gè)4 bits的寄存器,通過反復(fù)的移位和進(jìn)行CRC的除法,最終該寄存器中的值就是我們所要求的余數(shù)。 3 2 1 0 Bits +---+---+---+---+ Pop <-- | | | | | <----- Augmented message(已加0擴(kuò)張的原始數(shù)據(jù)) +---+---+---+---+ 1 0 1 1 1 = The Poly (注意: The augmented message is the message followed by W zero bits.) 依據(jù)這個(gè)模型,我們得到了一個(gè)最最簡單的算法: 把register中的值置0. 把原始的數(shù)據(jù)后添加r個(gè)0. While (還有剩余沒有處理的數(shù)據(jù)) Begin 把register中的值左移一位,讀入一個(gè)新的數(shù)據(jù)并置于register的0 bit的位置。 If (如果上一步的左移操作中的移出的一位是1) register = register XOR Poly. End 現(xiàn)在的register中的值就是我們要求的crc余數(shù)。 我的學(xué)習(xí)筆記: 可為什么要這樣作呢?我們從下面的實(shí)例來說明: 1100001010 _______________ 10011 ) 11010110110000 10011,,.,,.... -----,,.,,.... -》 10011,.,,.... 10011,.,,.... -----,.,,.... -》 00001.,,.... 00000.,,.... -----.,,.... 00010,,.... 00000,,.... -----,,.... 00101,.... 00000,.... 我們知道G(x)的最高位一定是1,而商1還是商0是由被除數(shù)的最高位決定的。而我們并不關(guān)心商究竟是多少,我們關(guān)心的是余數(shù)。例如上例中的G(x)有5位。我們可以看到每一步作除法運(yùn)算所得的余數(shù)其實(shí)就是被除數(shù)的最高位后的四位于G(x)的后四位XOR而得到的。那被除數(shù)的最高位有什么用呢?我們從打記號的兩個(gè)不同的余數(shù)就知道原因了。當(dāng)被除數(shù)的最高位是1時(shí),商1然后把最高位以后的四位于G(x)的后四位XOR得到余數(shù);如果最高位是0,商0然后把被除數(shù)的最高位以后的四位于G(x)的后四位XOR得到余數(shù),而我們發(fā)現(xiàn)其實(shí)這個(gè)余數(shù)就是原來被除數(shù)最高位以后的四位的值。也就是說如果最高位是0就不需要作XOR的運(yùn)算了。到這我們總算知道了為什么先前要這樣建立模型,而算法的原理也就清楚了。 以下是對作者的原文的翻譯: 可是這樣實(shí)現(xiàn)的算法卻是非常的低效。為了加快它的速度,我們使它一次能處理大于4 bit的數(shù)據(jù)。也就是我們想要實(shí)現(xiàn)的32 bit的CRC校驗(yàn)。我們還是假設(shè)有和原來一樣的一個(gè)4 "bit"的register。不過它的每一位是一個(gè)8 bit的字節(jié)。 3 2 1 0 Bytes +----+----+----+----+ Pop <-- | | | | | <----- Augmented message +----+----+----+----+ 1<------32 bits------> (暗含了一個(gè)最高位的“1”) 根據(jù)同樣的原理我們可以得到如下的算法: While (還有剩余沒有處理的數(shù)據(jù)) Begin 檢查register頭字節(jié),并取得它的值 求不同偏移處多項(xiàng)式的和 register左移一個(gè)字節(jié),最右處存入新讀入的一個(gè)字節(jié) 把register的值和多項(xiàng)式的和進(jìn)行XOR運(yùn)算 End 我的學(xué)習(xí)筆記: 可是為什么要這樣作呢? 同樣我們還是以一個(gè)簡單的例子說明問題: 假設(shè)有這樣的一些值: 當(dāng)前register中的值: 01001101 4 bit應(yīng)該被移出的值:1011 生成多項(xiàng)式為: 101011100 Top Register ---- -------- 1011 01001101 1010 11100 + (CRC XOR) ------------- 0001 10101101 首4 bits 不為0說明沒有除盡,要繼續(xù)除: 0001 10101101 1 01011100 + (CRC XOR) ------------- 0000 11110001 ^^^^ 首4 bits 全0說明不用繼續(xù)除了。 那按照算法的意思作又會有什么樣的結(jié)果呢? 1010 11100 1 01011100+ ------------- 1011 10111100 1011 10111100 1011 01001101+ ------------- 0000 11110001 現(xiàn)在我們看到了這樣一個(gè)事實(shí),那就是這樣作的結(jié)果和上面的結(jié)果是一致的。這也說明了算法中為什么要先把多項(xiàng)式的值按不同的偏移值求和,然后在和register進(jìn)行異或運(yùn)算的原因了。另外我們也可以看到,每一個(gè)頭字節(jié)對應(yīng)一個(gè)值。比如上例中:1011,對應(yīng)01001101。那么對于32 bits 的CRC 頭字節(jié),依據(jù)我們的模型。頭8 bit就該有 2^8個(gè),即有256個(gè)值與它對應(yīng)。于是我們可以預(yù)先建立一個(gè)表然后,編碼時(shí)只要取出輸入數(shù)據(jù)的頭一個(gè)字節(jié)然后從表中查找對應(yīng)的值即可。這樣就可以大大提高編碼的速度了。 +----+----+----+----+ +-----< | | | | | <----- Augmented message | +----+----+----+----+ | ^ | | | XOR | | | 0+----+----+----+----+ v +----+----+----+----+ | +----+----+----+----+ | +----+----+----+----+ | +----+----+----+----+ | +----+----+----+----+ | +----+----+----+----+ +-----> +----+----+----+----+ +----+----+----+----+ +----+----+----+----+ +----+----+----+----+ +----+----+----+----+ 255+----+----+----+----+ 以下是對作者的原文的翻譯: 上面的算法可以進(jìn)一步優(yōu)化為: 1:register左移一個(gè)字節(jié),從原始數(shù)據(jù)中讀入一個(gè)新的字節(jié). 2:利用剛從register移出的字節(jié)作為下標(biāo)定位 table 中的一個(gè)32位的值 3:把這個(gè)值XOR到register中。 4:如果還有未處理的數(shù)據(jù)則回到第一步繼續(xù)執(zhí)行。 用C可以寫成這樣: r=0; while (len--) r = ((r << 8) | p*++) ^ t[(r >> 24) & 0xFF]; 可是這一算法是針對已經(jīng)用0擴(kuò)展了的原始數(shù)據(jù)而言的。所以最后還要加入這樣的一個(gè)循環(huán),把W個(gè)0加入原始數(shù)據(jù)。 我的學(xué)習(xí)筆記: 注意不是在預(yù)處理時(shí)先加入W個(gè)0,而是在上面算法描述的循環(huán)后加入這樣的處理。 for (i=0; i<< 8) ^ t[(r >> 24) & 0xFF]; 所以是W/4是因?yàn)槿粲蠾個(gè)0,因?yàn)槲覀円宰止?jié)(8位)為單位的,所以是W/4個(gè)0 字節(jié)。注意不是循環(huán)w/8次 以下是對作者的原文的翻譯: 1:對于尾部的w/4個(gè)0字節(jié),事實(shí)上它們的作用只是確保所有的原始數(shù)據(jù)都已被送入register,并且被算法處理。 2:如果register中的初始值是0,那么開始的4次循環(huán),作用只是把原始數(shù)據(jù)的頭4個(gè)字節(jié)送入寄存器。(這要結(jié)合table表的生成來看)。就算register的初始值不是0,開始的4次循環(huán)也只是把原始數(shù)據(jù)的頭4個(gè)字節(jié)把它們和register的一些常量XOR,然后送入register中。 3:(A xor B) xor C = A xor (B xor C) 總上所述,原來的算法可以改為: +-----+----+----+----+----+ +----+----+----+----+ +----+----+----+----+ +----+----+----+----+ +----+----+----+----+ 255+----+----+----+----+ 算法: 1:register左移一個(gè)字節(jié),從原始數(shù)據(jù)中讀入一個(gè)新的字節(jié). 2:利用剛從register移出的字節(jié)和讀入的新字節(jié)XOR從而產(chǎn)生定位下標(biāo),從table中取得相應(yīng)的值。 3:把該值XOR到register中 4:如果還有未處理的數(shù)據(jù)則回到第一步繼續(xù)執(zhí)行。 我的學(xué)習(xí)筆記: 對這一算法我還是不太清楚,或許和XOR的性質(zhì)有關(guān),懇請大家指出為什么? 謝謝。 到這,我們對CRC32的算法原理和思想已經(jīng)基本搞清了。下章,我想著重根據(jù)算法思想用java語言實(shí)現(xiàn)。
文章TAG:crc32校驗(yàn)java校驗(yàn)問題crc32校驗(yàn)CRC32校驗(yàn)問題

最近更新