实验二:有限域GF28上的加减乘除运算实现姓名韦能龙班级11信息安全学号11350023实验目的通过上机操作,使学生对有限域的概念、性质及运算有一个充分的认识,为接下来现代密码学的学习打好基础。实验内容及要求1、学生自己生成一个有限域GF28并输出2、在生成的有限域中,随机选取两个元素进行加减乘除运算并输出结果实验结果(可续页)(包括实验代码、实验结果)思路:本实验需要解决的几个问题:1、用什么方法存储多项式最好?我用的是向量来储存多项式,比如:ployntemp;temp.push_back(make_pair(1,0));说明多项式temp中只有一项,为x^0,如果再执行temp.push_back(make_pair(1,4));则多项式temp变为x^0+x^4make_pair中第一个元素是系数,第二个是次数2、怎么生生成域?用递归生成,我们知道成域GFpn会有2的n次方个元素,只要能求出2的n-1个,就可以求出2的n个因为当为n时,n-1中的每一个多项式添加一个x^n次方就可以了。3、实现四则运算,尤其是在乘法和除法时,还有一个模运算的?因为是在二维的情形下啊的,所以实验中的加法减法的答案是同一个,至于乘法,乘出来的多项式的次数每循环一次都会减小至少1,所以最终会小于8的除法就是先求逆,因为我们知道域中的每个多项式都会有逆而且逆唯一并就在域中,所以用穷搜素的方法在于中一个一个试,只要相乘模x^8+x^4+x^3+x+1为1的就是逆。1、学生自己生成一个有限域GF28并输出,如下图:2、任选两个多项式进行四则运算:代码如下:/*本实验需要解决的几个问题:1、用什么方法存储多项式最好我用的是向量来储存多项式,比如:ployntemp;temp.push_back(make_pair(1,0));说明多项式temp中只有一项,为x^0,如果再执行temp.push_back(make_pair(1,4));则多项式temp变为x^0+x^4make_pair中第一个元素是系数,第二个是次数2、怎么生生成域用递归生成,我们知道成域GFpn会有2的n次方个元素,只要能求出2的n-1个,就可以求出2的n个因为当为n时,n-1中的每一个多项式添加一个x^n次方就可以了。3、实现四则运算,尤其是在乘法和除法时,还有一个模运算的因为是在二维的情形下啊的,所以实验中的加法减法的答案是同一个,至于乘法,乘出来的多项式的次数每循环一次都会减小至少1,所以最终会小于8的除法就是先求逆,因为我们知道域中的每个多项式都会有逆而且逆唯一并就在域中,所以用穷搜素的方法在于中一个一个试,只要相乘模x^8+x^4+x^3+x+1为1的就是逆。*/#include
#include#include#includeusingnamespacestd;intconstN=8;typedefvector>ployn;//V是x^8+x^4+x^3+x+1为1ploynV;//用递归方法求出域vectormake_field(intn){vectorfield;if(n==0){//如果n=0,说明域只有0和1两个元素ployntemp;temp.push_back(make_pair(1,0));field.push_back(temp);}else{field=make_field(n-1);//先求得出n-1时的域的多项式的集合ployntemp1,temp2;temp1.push_back(make_pair(1,n));intsize=field.size();field.push_back(temp1);for(intj=0;j_field){cout<<"该域总共有"<<_field.size()+1<<"个元素,它们是:"<