有限域運算

2021-06-16 00:45:02 字數 1205 閱讀 9100

忙了一周,總算把網路編碼的demo搞定了。

回想一下,大部分的時間都花在有限域的運算上了。網上找了幾個運算類,沒乙個像樣的,算出來

結果也沒兩個是一樣的,汗...主要是三個方面的問題,一是本原多項式p(x),到現在我還是沒搞懂這玩

意是怎麼定出來的,為什麼同樣是gf(2^8),有人說p(x)=x^8+x^4+x^3+x+1,有人又說是p(x)

=x^8+x^4+x^3+x^2+1,而且兩種還都可以正常運算(編碼後可以正確解碼),搞得我相當被動,最後選

擇的是前者,因為看起來支援的人要多一點,再汗...二是乘法,這也夠混亂的,有人按多項式展開,有人直接

對普通乘法求模,還有人...實在看不懂怎麼算的。好在後來從一段aes加密演算法的原始碼裡扒出個用查表

法實現的乘法函式,省時又好用。三是除法,這個簡直就很少有人提及了,據說除法可以分解成乘法和

求逆運算,可半天也沒想出怎麼分解,最後終於從一篇很老的*****裡找到了一點提示,總算是基本把有

限域運算這個難題給了結了。

畢竟我不是搞數學的,有限域只不過是個工具,能用就行,不想也沒時間深入研究下去了。不過還是把gf(2^8)運算中用到的幾個函式貼上來吧,就當是行善積德了。

**主要是正反對數表的構造和乘除法,至於加減,當然就是神奇的異或了。

public

static

int alog 

=new

int[

256];

public

static

int log 

=new

int[

256];

//構造gf(2^8)上的對數表和反對數表

public

void

generatelogtable() 

...log[0] 

=log[1] =0;

for(i =1

; i 

<

255; i++)

log[alog[i]] =i;

//gf(2^8)上的乘法運算,查表實現

public

intmul(

inta, 

intb) 

...

//gf(2^8)上的除法運算,查表實現

public

intdiv(

inta, 

intb) 

...else

...

有限域上的逆元求解

這個模運算之前沒有看懂,學習相關數論知識之後,理解了有限域的基本四則運算。有限域f p 上元素g的逆元g 1,兩者關係有 g g 1 mod p 1,所以上面的運算 4 13 4 13 1 4 16 64 64 mod 23 18 下面 實現了有限域 f p 中a的逆元計算,很簡單的窮舉法,沒有使用...

有限域和質數的冪

先說乙個結論 有限域的階為質數的冪。應用於密碼學領域。質數的冪 prime power 2,3,4,5,7,8,9,11,13,16,17,19,23,25,27,29,31,32,37,41,43,47,49,53,59,61,64,67,71,73,79,81,83,89,97,101,103,...

關於有限域乘法器的理解

seuchenrui 126.com 最近在看aes的標準文件fips 197,其中有關於有限域乘法器的描述。雖然計算過程很簡單,但是就是不明白為什麼如此計算。問過度娘之後,才對有限域乘法器有了基本的了解,現記錄如下。特別感謝 注意這篇部落格思路是正確的,但是給出的既約多項式是錯誤的,應該將 x 8...