实验四RSA算法实现.docx
- 文档编号:16833421
- 上传时间:2023-07-17
- 格式:DOCX
- 页数:13
- 大小:127.75KB
实验四RSA算法实现.docx
《实验四RSA算法实现.docx》由会员分享,可在线阅读,更多相关《实验四RSA算法实现.docx(13页珍藏版)》请在冰点文库上搜索。
实验四RSA算法实现
《电子商务安全技术》上机实验
实验四:
典型加密算法的实现
一、实验目的
DES及RSA算法作为典型的对称加密与非对称加密算法在国际上商用保密通信和计算机通信中一直占据重要地位,被广泛应用。
本实验通过对DES及RSA算法的编程,加深对DES及RSA等算法原理的理解,并掌握算法实现方法与过程。
二、实验要求
1、理解DES及RSA的加密与解密算法过程;
2、能利用编程工具设计出DES及RSA加密解密程序。
该程序至少应具备对一定范围的数字信息加密与解密的功能。
3、掌握利用编程工具调用标准加密函数的方法(可选)
三、实验内容
1、利用编程工具设计一个基于DES的加密与解密程序,并利用该程序对给定数据加密解密。
算法过程参考图1。
2、利用编程工具设计一个基于RSA的加密与解密程序,并利用该程序对给定数据加密解密。
算法过程如下:
①随机选定两个大素数p,q.
②计算公钥和私钥的公共模数n=pq.
③计算模数n的欧拉函数φ(n).
④选定一个正整数e,使1 ⑤计算d,满足de≡1(modφ(n)),(k为某个正整数). ⑥n与e构成公钥,n与d构成私钥. 3、利用编程工具设计一个加密与解密程序,通过调用基于DES和RSA的加密函数与解密函数,实现对给定数据的加密解密。 图1DES加密过程(解密过程参考加密过程) 四、实验步骤 (一)、DES算法实现 1、界面设计 设计算法加密与解密操作界面,如图2所示 图2DES算法加密与解密操作界面 2、初始置换程序代码设计 for(i=1;i<=64;i++) m1[i]=m[P0[i-1]];/P0为初始置换 3、第x(1-16)次迭代程序代码设计 for(i=1;i<=48;i++) R1[i]=Rx[E[i-1]];//E置换 for(i=1;i<=48;i++) R1[i]=R1[i]+Kx[i]; for(i=1;i<=48;i++) { if(R1[i]==2) R1[i]=0; } //S盒运算: for(i=1;i<7;i++) { s01[i]=R1[i]; s02[i]=R1[i+6]; s03[i]=R1[i+12]; s04[i]=R1[i+18]; s05[i]=R1[i+24]; s06[i]=R1[i+30]; s07[i]=R1[i+36]; s08[i]=R1[i+42]; } s[1]=s1[s01[6]+s01[1]*2][s01[5]+s01[4]*2+s01[3]*4+s01[2]*8]; s[2]=s2[s02[6]+s02[1]*2][s02[5]+s02[4]*2+s02[3]*4+s02[2]*8]; s[3]=s3[s03[6]+s03[1]*2][s03[5]+s03[4]*2+s03[3]*4+s03[2]*8]; s[4]=s4[s04[6]+s04[1]*2][s04[5]+s04[4]*2+s04[3]*4+s04[2]*8]; s[5]=s5[s05[6]+s05[1]*2][s05[5]+s05[4]*2+s05[3]*4+s05[2]*8]; s[6]=s6[s06[6]+s06[1]*2][s06[5]+s06[4]*2+s06[3]*4+s06[2]*8]; s[7]=s7[s07[6]+s07[1]*2][s07[5]+s07[4]*2+s07[3]*4+s07[2]*8]; s[8]=s8[s08[6]+s08[1]*2][s08[5]+s08[4]*2+s08[3]*4+s08[2]*8]; for(i=0;i<8;i++) { for(j=1;j<5;j++) { temp[j]=s[i+1]%2; s[i+1]=s[i+1]/2; } for(j=1;j<5;j++) f[4*i+j]=temp[5-j]; } for(i=1;i<33;i++)//P置换 fk[i]=f[P[i-1]]; for(i=1;i<33;i++) L8[i]=R7[i]; for(i=1;i<33;i++) { R8[i]=L7[i]+fk[i]; if(R8[i]==2) R8[i]=0; } 4、子密钥生成代码设计 for(i=1;i<57;i++) k0[i]=k[PC1[i-1]]; for(i=1;i<27;i++) { C8[i]=C7[i+2]; D8[i]=D7[i+2]; } C8[27]=C7[1]; D8[27]=D7[1]; C8[28]=C7[2]; D8[28]=D7[2]; for(i=1;i<=28;i++) { C[i]=C8[i]; C[i+28]=D8[i]; } for(i=1;i<=48;i++) Kx[i]=C[PC2[i-1]]; 5、解密程序代码设计参考步骤1-4。 (二)、RSA算法实现 6、界面设计 设计算法加密与解密操作界面,如图3所示 图3RSA算法加密与解密操作界面 7、密钥生成代码设计 longP,Q,N,E,D,Modulus; Randomize(); doP=RandomRange(1,50);//产生质数P while(! isPrime(P)); doQ=RandomRange(1,50);//产生质数Q while(! isPrime(Q)); N=P*Q;//加密解密模数 Modulus=(P-1)*(Q-1);//密钥计算模数 doE=RandomRange(1,Modulus);//计算公钥E while(! isPrime(E)); Edit2->Text=P; Edit5->Text=Q; Edit6->Text=N; Edit7->Text=Modulus; Edit3->Text=E;//现实计算结果 D=Euler(E,Modulus);//计算私钥钥D if(! VarIsNull(D)) { if(D<=0)D=Modulus+D; Edit4->Text=D; }; 8、加密代码设计 for(i=1;i<=E;i++) { C=C*M; if(C>=N)C=fmod(C,N); //加密模运算M的E次方较大,故改为分步求余 9、解密代码设计 for(i=1;i<=D;i++) { M=M*C; if(M>=N)M=fmod(M,N); };//解密模运算C的D次方较大,故改为分步求余 五、实验结果 原始明文,密钥,密文及解密密文,程序代码。 (1)程序代码解释 首先在CRSADlg中添加两个函数: isPrime(): 判断数字是质数和Euler(): 欧拉函数。 isPrime()代码如下: intCRSADlg: : isPrime(longPorQ) { longi; doubleSqrtOfPorQ; SqrtOfPorQ=sqrt(PorQ); for(i=2;i<=sqrt(PorQ);i++) if(fmod(PorQ,i)==0) return0; return1; }; Euler()代码如下: longCRSADlg: : Euler(longE,longM) { longX[3]={1,0,M},Y[3]={0,1,E},T[3],Q; while(! (Y[2]==1)&&! (Y[2]==0)) { Q=floor(X[2]/Y[2]); T[0]=X[0]-Q*Y[0]; T[1]=X[1]-Q*Y[1]; T[2]=X[2]-Q*Y[2]; X[0]=Y[0]; X[1]=Y[1]; X[2]=Y[2]; Y[0]=T[0]; Y[1]=T[1]; Y[2]=T[2]; }; if(Y[2]==1) returnY[1]; elsereturnNULL; } 接着设计生成密钥的代码: voidCRSADlg: : OnKey() { longP,Q,N,E,D,C; CStringPs,Qs,Ns,Es,Ds,Cs; srand(time(NULL)); doP=2+(long)(100*(rand()/(RAND_MAX+1.0))); while(! isPrime(P)); doQ=2+(long)(100*(rand()/(RAND_MAX+1.0))); while(! isPrime(Q)); N=P*Q; C=(P-1)*(Q-1); doE=1+(long)(C*(rand()/(RAND_MAX+1.0))); while(! isPrime(E)); D=Euler(E,C); if(D<=0) D=C+D; Ps.Format("%d",P); Qs.Format("%d",Q); Cs.Format("%d",C); Ns.Format("%d",N); Es.Format("%d",E); Ds.Format("%d",D); m_EditP.SetWindowText(Ps); m_EditQ.SetWindowText(Qs); m_EditC.SetWindowText(Cs); m_EditN.SetWindowText(Ns); m_EditE.SetWindowText(Es); m_EditD.SetWindowText(Ds); } 再设计加密的代码: voidCRSADlg: : OnEncrypt() { //TODO: Addyourcontrolnotificationhandlercodehere longM,E,N,i,En; CStringMs,Es,Ns,Ens; m_EditN.GetWindowText(Ns); m_EditE.GetWindowText(Es); m_EditM.GetWindowText(Ms); N=atoi(Ns); E=atoi(Es); M=atoi(Ms); En=1; for(i=1;i<=E;i++) { En=En*M; if(En>=N) En=fmod(En,N); }; Ens.Format("%d",En); m_EditEn.SetWindowText(Ens); } 最后是解密的代码: voidCRSADlg: : OnDecip() { //TODO: Addyourcontrolnotificationhandlercodehere longEn,D,N,i,DE; CStringEns,Ds,Ns,DEs; m_EditN.GetWindowText(Ns); m_EditD.GetWindowText(Ds); m_EditEn.GetWindowText(Ens); N=atoi(Ns); D=atoi(Ds); En=atoi(Ens); DE=1; for(i=1;i<=D;i++) { DE=DE*En; if(DE>=N) DE=fmod(DE,N); }; DEs.Format("%d",DE); m_EditDE.SetWindowText(DEs); } 1、下方是通过生成密钥生成的密钥: 2、下图是我对明文“222”进行加密,而得到“239”的密文。 3、下图是通过解密按钮,而得到对密文“239”进行解密得到明文“222”。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 RSA 算法 实现
![提示](https://static.bingdoc.com/images/bang_tan.gif)