伽罗华域上(Galois Field)上的四则运算-笔记

原网页:https://blog.csdn.net/shelldon/article/details/54729687


单位元: a ∗ e = e ∗ a = a a*e=e*a=a ae=ea=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 (x312x242)÷(x3)=x29x27123


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 (ab)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( ab=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 2w1

生成元:在域 G F ( 2 w ) GF\left( 2^w \right) GF(2w)中的生成元为2,当 k k k大于等于 2 w − 1 2^w-1 2w1时, g k = g [ k % ( 2 w − 1 ) ] g^k=g^{\left[ k\%\left( 2^w-1 \right) \right]} gk=g[k%(2w1)]

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(2w2)}包含了域 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 201

2 1 → x 2^1\rightarrow x 21x

2 2 → x 2 2^2\rightarrow x^2 22x2

2 3 → x + 1 2^3\rightarrow x+1 23x+1
求解过程

2 4 → x 2 + x 2^4\rightarrow x^2+x 24x2+x

2 5 → x 2 + x + 1 2^5\rightarrow x^2+x+1 25x2+x+1

2 6 → x 2 + 1 2^6\rightarrow x^2+1 26x2+1

n e x t   l o o p → next\ loop\rightarrow next loop

2 7 → 1 2^7\rightarrow 1 271

⋯ ⋯ \cdots \cdots

生成元 2 k 2^k 2k k k k元素 g f _{gf} gf对应二进制十进制
-00000
010011
1 x x x0102
2 x 2 x^2 x21004
3 x + 1 x+1 x+10113
4 x 2 + x x^2+x x2+x1106
5 x 2 + x + 1 x^2+x+1 x2+x+11117
6 x 2 + 1 x^2+1 x2+11015
7 1 1 10011
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
在 Python 中,要在伽罗华域 GF(2^13) 上执行乘法操作,首先你需要明确这是一个有限域,通常会通过 Galois Field 的生成元(也称域素元)来表示。对于 GF(2^13),我们一般选择一个叫做 α 的元素,其满足 α^{13} + α + 1 = 0。在这种二进制域中,所有数字都可以表示为 α^k 形式,其中 k 是一个整数,因为每个数都有一个唯一的二进制表示。 Python 中通常不会直接提供伽罗华域的操作,你需要自定义函数或者使用专门设计的库如 Numpy、PyCrypto 或者第三方库如 galois。这里简单举例一个使用生成元和位运算的基本方法,假设我们已经有了 α 和一个二进制表示的数 n: ```python # 定义域素元 α 和它的幂次 (alpha^i) def alpha_power(i): if i == 0: return 1 return (alpha_power(i // 13) * alpha) % 2**13 # 自定义乘法函数 def multiply_in_GF2_13(x, y): result = 0 for bit in bin(y)[2:]: if bit == '1': result ^= alpha_power(x) x <<= 1 # 左移一位相当于乘以2 return result % 2**13 # 使用示例 alpha = ... # 指定的域素元 x = alpha_power(4) # 例如,n = 4 对应的二进制形式 y = alpha_power(7) # 例如,m = 7 对应的二进制形式 result = multiply_in_GF2_13(x, y) ``` 请注意,实际应用中你需要确定 α 的值,并且可能需要处理负数(它们在二进制域内有特定的表示规则),以及正确地进行加法等操作。上述代码仅用于演示基本思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值