AES:有限域的多项式乘法逆元求解
来源:互联网 发布:试用网源码 编辑:程序博客网 时间:2024/05/10 15:55
题目:
求解算法,扩展的欧几里得算法
/*@author tilltheendwjx@blog http://blog.csdn.net/wjh200821或者http://www.cnblogs.com/tilltheendwjx/ */ #include<iostream>using namespace std;int indexofmax1(int value){ int tmp=1; int count=0; for(int i=0;i<sizeof(int)*8;++i) { if((value&tmp)) count=i; tmp=tmp*2; } return count;}void polynomialtostring(int value){ int tmp=1; int flag=0; int c=indexofmax1(value); for(int i=0;i<sizeof(int)*8;++i) { if((value&tmp)) { if(i==0) { cout<<"1"; }else if(i==1) { cout<<"x"; }else { cout<<"x^"<<i; } flag=1; if(i<c) cout<<"+"; } tmp=tmp*2; } if(flag==0) cout<<"0";}int powofvalue(int value){ return 1<<(value);}int divide(int m,int b,int &remainvalue){ int mindex=indexofmax1(m); int vindex=indexofmax1(b); if(mindex<vindex) { remainvalue=m; return 0; } int c=mindex-vindex; int tmp=b; tmp=tmp<<c; m=m^tmp; return powofvalue(c)|divide(m,b,remainvalue);}int Tx(int ax,int q,int bx){ //cout<<endl; //cout<<ax<<"\t"<<bx<<"\t"; int tmp=1; int value=0; for(int i=0;i<sizeof(int)*8;++i) { if((q&tmp)) { value=value^((bx<<i)); } tmp=tmp*2; } //cout<<ax<<"\t"<<value<<"\t"; //cout<<endl; return ax^(value);}int extent_gcd(int m,int b,int &x,int &y){ int a1=1,a2=0,a3=m; int b1=0,b2=1,b3=b; int remainvalue=0; while(1) { polynomialtostring(a1); cout<<" "; polynomialtostring(a2); cout<<" "; polynomialtostring(a3); cout<<" "; polynomialtostring(b1); cout<<" "; polynomialtostring(b2); cout<<" "; polynomialtostring(b3); cout<<" "; if(b3==0) return a3; if(b3==1) return b3; int q=divide(a3,b3,remainvalue); int t1=Tx(a1,q,b1); int t2=Tx(a2,q,b2); int t3=remainvalue; cout<<t1<<endl; cout<<t2<<endl; a1=b1;a2=b2;a3=b3; b1=t1;b2=t2;b3=t3; x=b2;y=b3; polynomialtostring(q); cout<<endl; } }int main(void){int m=283,b=83,x=0,y=0;cout<<"中间结果如下:"<<endl; cout<<"a1 a2 a3 b1 b2 b3 q"<<endl;int reault=extent_gcd(m,b,x,y);cout<<endl;cout<<"多项式(";polynomialtostring(b);cout<<")mod(";polynomialtostring(m);cout<<")的乘法逆元是(";polynomialtostring(x);cout<<")"<<endl;system("pause"); return 0;}
运行结果如下图
阅读全文
0 0
- AES:有限域的多项式乘法逆元求解
- 有限域中的乘法逆元
- 乘法逆元的求解
- AES中构造s盒中的乘法逆元的c语言实现
- 扩展欧几里得算法 有限域上多项式求逆
- 欧几里得算法求解乘法逆元——Python
- 乘法逆元的求法
- 乘法逆元的作用
- 乘法逆元的作用
- 乘法逆元的求法
- 乘法逆元(对于非质数的乘法逆元)
- 【多项式】多项式逆元/开方
- 有限域 8次 所有本原多项式
- Strange Way to Express Integers(扩展欧几里得+乘法逆元+中国剩余定理求解非互质的模线性方程组)
- 3.数据结构--线性表之一元多项式的加法与乘法运算
- 一元多项式的乘法C++
- 多项式的加法乘法实现
- 多项式的乘法和除法
- Linux日志清理
- 最大子列和oj不过
- [一日一教学](19)格式化磁盘:format
- tomcat在腾讯云服务器上的配置
- UISwitch的使用
- AES:有限域的多项式乘法逆元求解
- maven 环境构建
- redis的事务和watch
- Oracle忘记密码或者密码过期如何修改
- 在一台linux机子上安装部署3个mysql实例
- PaintCOST.Estimator.for.Excel.v6.01油漆工程成本估算
- 机器学习之决策树分类算法(ID3 and C4.5)
- log4j的日志使用方式
- oracle正确卸载步骤