有限域的第一种表示方法称为多项式表示,这种表示是基于域的有限 扩张,设p是素数,,只要找到上一个n次不可约多项式f(x),就 有。 在信息安全领域,应用最多的有限域是和素域。
下面介绍有限域的多项式表示:
选用上的一个n次既约多项式扩成一个,由模的 全体余式的集合,即
每个域的元素都可以表示为一个次数 的多项式.
基本运算操作
举例:
注:以下皆为有限域的运算或有限域上的多项式运算。
1.创建有限域
GF=galois.GF(2**4,repr="poly")
repr="poly"指用多项式表示
2.访问有限域的不可约多项式
GF.irreducible_poly
3.构建有限域上的多项式
f = galois.Poly([1, 1, 1], field=GF)
Out: Poly(x^2 + x + 1, GF(2))
注:在有限域上构建多项式后,几乎任何多项式算术运算都可以 使用 Python 运算符执行,例如f+g、f-g、f*g、加法逆-f、模余f%g、幂f**3.
将多项式和有限域标量相加减乘除,标量被视为 0 次多项式,例:f + GF(3)。
4.函数divmod(f, g):
将一个多项式除以另一个多项式并返回商和余数。
divmod(f, g)
5.求多项式最大公因数
d = galois.gcd(f, g)
6.扩展的欧几里得除法求多项式最大公因数和逆元
可用该函数求多项式在有限域中的逆元。
d, s, t = galois.egcd(f, g)
7.不可约多项式的因式分解
galois.factors(f)
f.factors()
以上两种访问方法都可以,galois.factors(f) == f.factors()。
8.访问有限域的属性
print(GF.properties)
9.检索有限域的元素
GF7.elements
10.输出有限域的算数表(加减乘)
以加法为例:
print(GF.arithmetic_table("+"))
11.有限域的生成元
galois.primitive_root(7)#抽象有限域的生成元组
g = GF.primitive_element#具体有限域的最小生成元
12.计算有限域的=
有限域的生成元g的定义多项式叫做本原多项式,设是上的n次本原多项式,则使得的最小正整数。
g.multiplicative_order()
13.输出有限域的生成元表
print(GF.repr_table())
实例
求 的生成元 ,并计算 , 和所有生成元。
import galois
f=galois.irreducible_poly(2,8)
GF=galois.GF(2**8,repr="poly", irreducible_poly=f)
print("f=",f)
g=GF.primitive_element
print("g=",g)
g1=g.multiplicative_order()
print(g1)
print(GF.repr_table(g))
输出Out:文章来源:https://www.toymoban.com/news/detail-826079.html
......文章来源地址https://www.toymoban.com/news/detail-826079.html
注:API参考网址:Arrays - galois (mhostetter.github.io)
到了这里,关于python有限域的运算——galois库(伽罗瓦群)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!