1、#include#include#include#include#includechars100,*c;intn,e,d,i,C,j,k=0,len;intstr100,b30;unsignedgcd(unsigneda,unsignedb)if(a%b=0)returnb;elsereturngcd(b,a%b);voidEgcd(inta,intb,int&x,int&y)/ax-by=1if(b=0|a=0)x=1;y=0;return;if(ab)Egcd(a,b%a,x,y);x=(int)(b*y+1)/a;elseEgcd(a%
2、b,b,x,y);y=(int)(a*x-1)/b;voidRSA()intp,q,N,Y;printf(请输入素数p和q:);scanf(%d%d,&p,&q);n=p*q;N=(p-1)*(q-1);初始化随机数产生随机整数e,e与N互质/printf(n=%dN=%dn,n,N);srand((unsigned)time(NULL));/while(1)/e=rand()%N;/printf(e=%dn,e);if(e=0)continue;if(gcd(N,e)=1)break;/printf(e=%dn,e);Egcd(e,N,d,Y);/printf(d
3、=%dY=%dn,d,Y);printf(公钥PU=e=%d,n=%dn,e,n);printf(私钥PR=d=%d,n=%dn,d,n);voidencrypt()/加密函数len=strlen(s);/hgprintf(len=%dn,len);for(i=0;ilen;i+)/去掉s100中的空格if(si122)bk=i;k+;for(j=i;jlen-1;j+)sj=sj+1;len-;slen=0;/结束符printf(密文是:);for(i=0;ilen;i+)C=1;/printf(shiji=%dn,si-97);for(intj=0;j
4、e;j+)C=(C*(si-97)%n;/printf(C=%ldn,C);stri=C;printf(%d,stri);printf(n);voiddecrypt()/解密函数c=(char*)malloc(len*sizeof(int);for(i=0;ilen;i+)/实现解密C=1;for(intj=0;jd;j+)C=(C*(stri)%n;/printf(C=%ldn,C);/printf(C=%dn,C);ci=C+97;ci=0;/puts(c);for(intz=0;zk;z+)/加空格for(i=0;ii;j-)cj=c
5、j-1;ci=;len+;bz+1=bz+1+(z+1);break;clen=0;printf(明文:);puts(c);intfunction()/系统功能选择页面intchoice;printf(=n);printf(欢迎进入RSA法n);printf(1-加密n);printf(2-解密n);printf(3-退出n);printf(=n);printf(请输入要选择的功能号:);scanf(%d,&choice);returnchoice;intmain()intfunction();intfc;printf(请输入初始明文(小写):);gets(s);提供私钥和公钥加密解密/puts(s);RSA();/while(1)fc=function();if(fc=1)/encrypt()