原网页:https://blog.csdn.net/shelldon/article/details/54729687
单位元: a ∗ e = e ∗ a = a a*e=e*a=a a∗e=e∗a=a
本原多项式:域中不可约多项式是不能够进行因子分解的多项式。
1、多项式加减法:
(
x
2
+
1
)
+
(
x
+
1
)
=
x
2
+
x
+
1
(x^2+1)+(x+1)=x^2+x+1
(x2+1)+(x+1)=x2+x+1
2、多项式乘法:
(
x
2
+
1
)
∗
(
x
+
1
)
=
x
2
+
2
x
+
1
(x^2+1)*(x+1)=x^2+2x+1
(x2+1)∗(x+1)=x2+2x+1
3、多项式除法:
(
x
3
−
12
x
2
−
42
)
÷
(
x
−
3
)
=
x
2
−
9
x
−
27
⋯
⋯
−
123
\left( x^3-12x^2-42 \right) \div \left( x-3 \right) =x^2-9x-27\cdots \cdots -123
(x3−12x2−42)÷(x−3)=x2−9x−27⋯⋯−123
G
F
(
2
w
)
GF\left( 2^w \right)
GF(2w)多项式计算,多项式系数只能取
0
,
1
0,1
0,1;
G
F
(
3
w
)
GF\left( 3^w \right)
GF(3w)多项式计算,多项式系数只能取
0
,
1
,
2
0,1,2
0,1,2;
在
G
F
(
2
w
)
GF\left( 2^w \right)
GF(2w)多项式加法中,合并阶数相同的同类项时为异或运算,减法等同于加法。
G
F
(
p
)
GF\left(p\right)
GF(p)中的
p
p
p一定要为素数,加法
(
a
+
b
)
m
o
d
p
\left( a+b \right) mod\ p
(a+b)mod p,乘法
(
a
∗
b
)
m
o
d
p
\left( a*b \right) mod\ p
(a∗b)mod p。(素数
=
1
∗
=1*
=1∗本身,不可被
1
1
1与本身之外的整数整除)
p
p
p为素数时能保证任意一个
a
a
a在
G
F
(
2
w
)
GF\left( 2^w \right)
GF(2w)中有
b
b
b,使
a
∗
b
=
e
(
a*b=e(
a∗b=e(不含
0
)
0)
0)。
G F ( 2 w ) GF\left( 2^w \right) GF(2w)上的加法和乘法运算,不再是一般的加法和乘法,而是多项式运算。
伽罗华域的元素可以通过该域上的的本原多项式生成,通过本原多项式得到的域,其加法单位元都是0,乘法单位元是1。
伽罗华域上的运算:
加法和减法:异或运算
乘法和除法: m o d ( p ) mod\left( p \right) mod(p)
当为0时,小于多项式,不需要取模运算
当为1时,一定小于等于,不需要取模运算
G F ( 2 w ) GF\left( 2^w \right) GF(2w)是一个有限域,就是元素个数是有限的,但指数 k k k是可以无穷的,所以必然存在循环。这个循环周期为 2 w − 1 2^w-1 2w−1。
生成元:在域 G F ( 2 w ) GF\left( 2^w \right) GF(2w)中的生成元为2,当 k k k大于等于 2 w − 1 2^w-1 2w−1时, g k = g [ k % ( 2 w − 1 ) ] g^k=g^{\left[ k\%\left( 2^w-1 \right) \right]} gk=g[k%(2w−1)]。
g g g为域 G F ( 2 w ) GF\left( 2^w \right) GF(2w)上的生成元,集合 { g 0 , g 1 , . . . , g ( 2 w − 2 ) } \left\{ g^0,g^1,...,g^{\left( 2^w-2 \right)} \right\} {g0,g1,...,g(2w−2)}包含了域 g g g为域 G F ( 2 w ) GF\left( 2^w \right) GF(2w)上所有非零元素。
对于 g k = a g^k=a gk=a,有正过程和逆过程。指数 k k k求 a a a是正过程,元素 a a a求 k k k是逆过程。
例: G F ( 2 3 ) GF\left( 2^3 \right) GF(23)的一个生成多项式为 x 3 + x + 1 x^3+x+1 x3+x+1
生成元对应的非零元素集合 { 2 0 , 2 1 , 2 2 , 2 3 , 2 4 , 2 5 , 2 6 } \left\{ 2^0,2^1,2^2,2^3,2^4,2^5,2^6 \right\} {20,21,22,23,24,25,26}
2 0 → 1 2^0\rightarrow 1 20→1
2 1 → x 2^1\rightarrow x 21→x
2 2 → x 2 2^2\rightarrow x^2 22→x2
2
3
→
x
+
1
2^3\rightarrow x+1
23→x+1
2 4 → x 2 + x 2^4\rightarrow x^2+x 24→x2+x
2 5 → x 2 + x + 1 2^5\rightarrow x^2+x+1 25→x2+x+1
2 6 → x 2 + 1 2^6\rightarrow x^2+1 26→x2+1
n e x t l o o p → next\ loop\rightarrow next loop→
2 7 → 1 2^7\rightarrow 1 27→1
⋯ ⋯ \cdots \cdots ⋯⋯
生成元 2 k 2^k 2k中 k k k值 | 元素 g f _{gf} gf | 对应二进制 | 十进制 |
---|---|---|---|
- | 0 | 000 | 0 |
0 | 1 | 001 | 1 |
1 | x x x | 010 | 2 |
2 | x 2 x^2 x2 | 100 | 4 |
3 | x + 1 x+1 x+1 | 011 | 3 |
4 | x 2 + x x^2+x x2+x | 110 | 6 |
5 | x 2 + x + 1 x^2+x+1 x2+x+1 | 111 | 7 |
6 | x 2 + 1 x^2+1 x2+1 | 101 | 5 |
7 | 1 1 1 | 001 | 1 |
… | … | … | … |
clear all;
close all;
clc;
index = 4;
len = pow2(index)-1;
gfnums1 = gf(randi([0 len],[1,3]),index);
gfnums2 = gf(randi([0 len],[1,3]),index).';
nums1 = double(gfnums1.x);
nums2 = double(gfnums2.x);
mid = gf(zeros(size(nums1)),index);
fprintf('\t伽罗华域对位乘:\n');
for i=1:size(nums1,2)
y = gfnums1(i)*gfnums2(i);
mid(i) = y;
disp(double(y.x));
end
fprintf('\t伽罗华域将对位乘相加得到伽罗华域结果:\n');
y = gf(0,index);
for i=1:size(nums1,2)
y = y+mid(i);
disp(double(y.x));
end
temp = gfnums1*gfnums2;
fprintf('\t伽罗华域的乘积:\n');
disp(double(temp.x));
fprintf('\t自然域的乘积:\n');
disp(nums1*nums2);
fprintf('\t自然域的乘积模:\n');
disp(mod(nums1*nums2,pow2(index)));
伽罗华域对位乘:
3
7
1
伽罗华域将对位乘相加得到伽罗华域结果:
3
4
5
伽罗华域的乘积:
5
自然域的乘积:
194
自然域的乘积模:
2