伽罗华域(Galois Field,GF,有限域)乘法运算

最近在做毕设,在看RS编码原理时,关于其乘法运算一直没看明白,文献也没有细说,今天发现一篇博客,看完之后豁然开朗,特地将此博客转载了过来,略作补充,红色为补充内容。

原文地址:http://blog.csdn.net/mengboy/article/details/1514445

GF(2m)域

当m=8时,本原多项式为P(x) = x+ x+x+ x+ 1 .

这个很重要,因为一切化解都来源与此式。

在伽罗华域中,加法等同于对应位异或,所以

现在把α定义为P(x) = 0的根,即
    α8+α4+α3+α2+1 = 0
    即可以得到 α84+α3+α2+1,因为在珈罗华域中加法为模2加法,实际上是异或操作,所有有此2个等式同时成立

接着先给出下表付推导过程

 

 下面就按以下规则进行乘法运算 

  0=000   就是0     
  1=001   就是1   
  2=0010就是x+0=x   (此处及下文的x,其实就是表中的primitive element α
  3=0011就是x+1   
  4=00100就是x^2   
  然后对于两个变量   
  u,v   
  可以先计算两个对应多项式的乘积(需要注意的是加法是模2的,或者说是异或运算),   
  比如   
  3*7=(x+1)*(x^2+x+1)=x*x^2+x*x+x+x^2+x+1=x^3+1   (模2运算中x+x=0   and   x^2+x^2=0)   
  所以3*7=9   (伽罗华域中乘法运算其实是域中元素对应的多项式的乘法运算,相加时为模2加法)
  在乘积得出来的多项式次数大于7时,我们需要对多项式在GF(2)上关于h(x)(h(x)就是本原多项式P(x))求余数,也就是   
  129*5=(x^7+1)*(x^2+1)=x^9+x^7+x^2+1   
  将上面的函数加上x*h(x) (h(x)就是本原多项式P(x))可以消去x^9,(其实就是手工除法过程,只是现在每一次商总是0或1),所以   
  129*5=x^9+x^7+x^2+1+x^9+x^5+x^4+x^3+x=x^7+x^5+x^4+x^3+x^2+x+1   
  =0010111111=191


在 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、付费专栏及课程。

余额充值