你好,求教crc校驗,crc校驗中的除數是怎麼確定的啊?

2022-08-19 19:57:10 字數 3868 閱讀 6966

1樓:匿名使用者

crc即迴圈冗餘校驗碼(cyclic redundancy check[1] ):是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊欄位和校驗欄位的長度可以任意選定。迴圈冗餘檢查(crc)是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。

工作原理

迴圈冗餘校驗碼(crc)的基本原理是:在k位資訊碼後再拼接r位的校驗碼,整個編碼長度為n位,因此,這種編碼也叫(n,k)碼。對於一個給定的(n,k)碼,可以證明存在一個最高次冪為n-k=r的多項式g(x)。

根據g(x)可以生成k位資訊的校驗碼,而g(x)叫做這個crc碼的生成多項式。 校驗碼的具體生成過程為:假設要傳送的資訊用多項式c(x)表示,將c(x)左移r位(可表示成c(x)*2r),這樣c(x)的右邊就會空出r位,這就是校驗碼的位置。

用 c(x)*2r 除以生成多項式g(x)得到的餘數就是校驗碼。

任意一個由二進位制位串組成的**都可以和一個係數僅為『0』和『1』取值的多項式一一對應。例如:**1010111對應的多項式為x6+x4+x2+x+1,而多項式為x5+x3+x2+x+1對應的**101111。

2樓:風若遠去何人留

crc16 8005**。

#define  crc_16_polynomials (0x8005)    // crc16校驗生成多項式

unsigned short calcbyte(int crc, char b)

else

}return crc & 0xffff;

* 函式名稱: crc16

* 函式功能: crc16校驗

* 函式引數:

*   char *pbuffer  待校驗資料

*   int  length    待校驗資料長度

* 返回值: unsigned short crc16校驗碼

unsigned short crc16(char *pbuffer, int length)

for (int i = 0; i < length; i++)

return wcrc16;}

crc校驗是什麼?

3樓:匿名使用者

crc是什麼東西呢?其實我們大家都不應該會對它陌生,回憶一下?你用過rar和zip等壓縮軟體嗎?

它們是不是常常會給你一個惱人的「crc校驗錯誤」資訊呢?我想你應該明白了吧,crc就是塊資料的計算值,它的全稱是「cyclic redundancy check」,中文名是「迴圈冗餘碼」,「crc校驗」就是「迴圈冗餘校驗

4樓:匿名使用者

一篇通俗易懂的關於crc的文章

5樓:匿名使用者

crc迴圈校驗是什麼????????

crc是什麼東西呢?其實我們大家都不應該會對它陌生,回憶一下?你用過rar和zip等壓縮軟體嗎?

它們是不是常常會給你一個惱人的「crc校驗錯誤」資訊呢?我想你應該明白了吧,crc就是塊資料的計算值,它的全稱是「cyclic redundancy check」,中文名是「迴圈冗餘碼」,「crc校驗」就是「迴圈冗餘校驗」。(哇,真拗口,希望大家不要當我是唐僧,呵呵。

^_^)

crc有什麼用呢?它的應用範圍很廣泛,最常見的就是在網路傳輸中進行資訊的校對。其實我們大可以把它應用到軟體保護中去,因為它的計算是非常非常非常嚴格的。

嚴格到什麼程度呢?你的程式只要被改動了一個位元組(甚至只是大小寫的改動),它的值就會跟原來的不同。hoho,是不是很厲害呢?

所以只要給你的「原」程式計算好crc值,儲存在某個地方,然後在程式中隨機地再對檔案進行crc校驗,接著跟第一次生成並儲存好的crc值進行比較,如果相等的話就說明你的程式沒有被修改/破解過,如果不等的話,那麼很可能你的程式遭到了病毒的感染,或者被cracker用16進位制工具暴力破解過了。

參考資料:矛與盾的較量(2)——crc原理篇%20%20老羅的繽紛天地.htm

6樓:

crc即迴圈冗餘校驗碼(cyclic redundancy check):是資料通訊領域中最常用的一種差錯校驗碼,其特徵是資訊欄位和校驗欄位的長度可以任意選定。

迴圈冗餘校驗碼(crc)的基本原理是:在k位資訊碼後再拼接r位的校驗碼,整個編碼長度為n位,因此,這種編碼也叫(n,k)碼。對於一個給定的(n,k)碼,可以證明存在一個最高次冪為n-k=r的多項式g(x)。

根據g(x)可以生成k位資訊的校驗碼,而g(x)叫做這個crc碼的生成多項式。 校驗碼的具體生成過程為:假設傳送資訊用資訊多項式c(x)表示,將c(x)左移r位,則可表示成c(x)*x的r次方,這樣c(x)的右邊就會空出r位,這就是校驗碼的位置。

通過c(x)*x的r次方除以生成多項式g(x)得到的餘數就是校驗碼。

crc校驗的原則

7樓:迷迭逆夏妉

若設碼字長度為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次校驗多項式(即crc校驗和),

g(x)稱為生成多項式:

g(x)=g0+g1x1+ g2x2+...+g(r-1)x(r-1)+grxr

傳送方通過指定的g(x)產生crc碼字,接收方則通過該g(x)來驗證收到的crc碼字。

crc校驗中的除數是怎麼確定的啊? 20

8樓:匿名使用者

首先要知道crc生成的多項式p(x)。除數的位數是p(x)最高次冪+1,從右往左分別為第0位1位2位3位4位...p(x)每個冪數代表著除數從右到左第幾位為1,其餘的都為0,比如p(x)=x^3+1就是第3位和第0位為1,其餘是0

這樣就得出除數了

9樓:匿名使用者

在資料後面加三個0是這樣來的:除數的位數減一,如1101為4位,則在後面加4-1=3個0;這是為了後面接收方檢驗時能整除設的;除數是傳送雙方事先商定的,常用生成多項式p(x)表示,1101就是p(x)=x^3+x^2+1;

如何計算crc校驗碼?

10樓:匿名使用者

我先給你舉個例子:

已知資訊位為1100,生成多項式g(x) = x3+x+1,求crc碼。

m(x) = 1100 m(x)*x3 = 1100000 g(x) = 1011

m(x)*x3 / g(x) = 1110 + 010 /1011 r(x) = 010

crc碼為: m(x)*x 3+r(x)=1100000+010 =1100010

其原理是:crc碼一般在k位資訊位之後拼接r位校驗位生成。編碼步驟如下:

(1)將待編碼的k位資訊表示成多項式 m(x)。

(2)將 m(x)左移 r 位,得到 m(x)*xr 。

(3)用r+1位的生成多項式g(x)去除m(x)*xr 得到餘數r(x)。

(4)將m(x)*xr 與r(x)作模2加,得到crc碼。

求crc校驗計算方法

11樓:風若遠去何人留

你這個是crc16

要實現校驗的話,你首先需要知道對方採用的是何種crc公式不同的crc公式 得到的校驗碼是不一樣的

在知道公式的情況下

做crc表,然後按照crc演算法,計算這8個位元組的整體crc如果傳輸沒有錯誤的話,最終的crc值是0

也可以計算前六個的crc,然後和最後兩個位元組比較,效果是相同的。

c語言求教,c語言求教!!!!!

先佔位置 保留四位小數的結果為1.1724第五題第五題程式 include stdafx.h include int main int i 0 float sum 0.0 for i 1 i 1000 i sum 1.0 i printf n1000以內能被7整除或被11整除 n n但是不能同時整除...

求教c語言大神,求教C語言大神

你的create就有問題,總是少最後一個結點。結合兩個連結串列時,裡面的while迴圈有問題。稍微修改了一下,加了一個函式,生成a和b連結串列時,讓它們有序,結合兩個有序連結串列,這樣簡單很多。示例如下 include include define len sizeof struct student...

c語言的問題,第八題,求教求教,C語言問題,小白求教

您好,a 望採納,謝謝 include void main else if close open else if low open low close if hign open hign close else len sprintf print len,upper shadow printf pri...