文档介绍:网络安全作业RSA算法流程如下:(1)密钥生成算法流程:1)随机地选择两个大素数p和q(需保密);2)计算乘积n=p×q;3)计算欧拉函数z=j(n)=(p-1)(q-1)。其数值等于小于n并且与n互质的整数的个数。4)选择一个随机数e,使e与z互质,且1<e<z。5)计算d,使d*e=1modz。6)其中,公钥KP={e,n},私钥KS={d,n}。(2)RSA加密、解密的过程首先将明文分块并数字化,每个数字化明文块的长度小于或等于log2n。然后对每个明文块M依次进行加、解密:①加密:使用公钥e和加密密文m,即C=modn;②解密:使用私钥d将密文c解密,获得明文m,即M=modn。:(1)存储大整数的数据结构:typedefstruct{ int length; unsignedintn[MAX]; }Lint;这里大整数用65536进制表示并使用结构体Lint存储大整数。Lint由一个整型变量length和一个无符号整型数组n[MAX]构成,length存储大整数的位数,n[MAX]具体存储每一位的值。(2)具体的算法:具体的算法主要参考了此书:赵振江等译.《密码编码学——加密方法的C与C十十实现(第二版)》.北京:电子工业出版社,2003具体的算法包括:基于上述数据结构的大整数的加、减、乘、除、模幂运算,求逆元运算,以及大素数的判定等。这些算法的具体内容都在原程序与其注释中。。RSA生成密钥源程序及运行结果#include<iostream>#include<cmath>usingnamespacestd;voidmain(){intp,q;cout<<"*****RSA生成密钥算法*****"<<endl<<endl;cout<<"请输入两个较大的素数:"<<endl;cin>>p>>q;cout<<"p="<<p<<",q="<<q<<endl;intn,o;n=p*q;o=(p-1)*(q-1);cout<<"n="<<n<<",o="<<o<<endl;cout<<"请从(0,"<<o-1<<")中选择一个与"<<o<<"互素的数e:"<<endl;inte,i;floatd;cin>>e;for(i=1;;i++){d=(float)(o*i+1)/e;if(d-(int)d==0)break;}cout<<"e="<<e<<",d="<<d<<endl;cout<<"公开密钥Pk={e,n}={"<<e<<","<<n<<"}"<<endl;cout<<"秘密密钥Sk={d,n}={"<<d<<","<<n<<"}"<<endl;cout<<endl;cout<<"请输入要加密的正整数(以-1结束):"<<endl;intm1[500],m3[500],m4[500];doublem2[500];intj;for(j=0;j<500;j++){cin>>m1[j];if(m1[j]==-1)break;m2[j]=pow(m1[j],e);m4[j]=m2[j]/n;m3[j]=m2[j]-m4[j]*n;}cout<<"密文为:"<<endl;intk;for(k=0;k<j;k++)cout<<m3[k]<<"";cout<<endl;}程序运行结果及分析:算法按照要求进行,生成的密钥也符合要求。(2)RSA加密及解密算法实现源程序及运行结果#include""#include<>#include<>#include<>#include<>#defineMAX200/定义大整数的最大位数,200完全可以满足p与q达到768bit位的要求,可以选择更大的数。#defineGREAT1//定义大整数比较时的返回值#defineEQUAL0#defineLOW-1#definePL33//如果重新生成p与q,则PL定义了p与q的最大位数。这里定义为33保证p与q达到512bit长度。typedefstruct{ int length; unsignedintn[MAX]; }Lint;LintZERO,ONE,TWO;//定义常用大整数0、1、2。//Init_Lint函数功能:初始化大整数。首先清零,然后把前n位设置为valueintInit_Lint(Lint*a,intn,unsignedintvalue){ inti; if(a==NULL) return(0); else { a->length=0; for(i=0;i<MAX;i++) a->n[i]=0; for(i=0;i<n;i++) a->n[i]=value;