忙了一周,總算把網路編碼的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...