还剩3页未读,继续阅读
文本内容:
ttinclude stdlib.httinclude stdio.httinclude string.httinclude math.httinclude time.hchar s
[100],*c;int n,e,d,i,C,j,k=0,len;int str
[100],b
[30];unsigned gcdunsigned a,unsigned b{ifa%b==0return b;elsereturn gcdb,a%b;void Egcdint a,int b,int x,int y{//ax-by=lif b=0I|a=0x=l;y=0;return;ifab Egcda,b%a,x,y;x=int b*y+l/a;else Egcda%b,b,x,y;y二inta*x-l/b;}void RSAintp,q,N,Y;printf〃请输入素数p和q:〃;scanf z,%d%d〃,p,q;n=p*q;N二pT*qT;//printf〃n=%d N=%d\nz,,n,N;srand unsignedtimeNULL;〃初始化随机数while1〃产生随机整数e,e与N互e=rand%N;//printf〃e二二%d\n〃,e;if e=0continue;if gcdN,e==lbreak;//printf,ze=%d\n/z,e;Egcde,N,d,Y;//printf z/d=%d Y=%d\n〃,d,Y;printf〃公钥PU={e=%d,n=%d}\n〃,e,n;printf〃私钥PR={d=%d,n=%d}\n〃,d,n;void encrypt〃加密函数{len=strlen s;//hgprintf z/len=%d\n/z,len;fori=0;ilen;i++〃去掉s
[100]中的空格ifs[i]97||s[i]122b[k]=i;k++;forj=i;jlen-l;j++{s[j]=s[j+l];len一;s[len]=W;〃结束符printf〃密文是〃;fori=0;ilen;i++c=l;//printf〃shiji=%d\n〃,s[i]-97;for intj=0;je;j++C=C*s[i]-97%n;//printf〃C=%ld\n〃,C;}str[i]=C;printf z,%d〃,str[i];printf〃\n〃;void decrypt〃解密函数c二char*malloclen*sizeofint;for i=0;ilen;i++〃实现解密C=l;for intj=0;jd;j++{C=C*str[i]%n;//printf〃C=%ld\n〃,C;}//printf z/C=%d\nz,,C;c[i]=C+97;c[i]=,\0//putsc;forint z=0;z〈k;z++〃加空格fori=0;ilen;i++if i二二b[z]forj=len;ji;j—c[j]=c[j-l];c[i]=,;len++;b[z+l]=b[z+l]+z+1;break;c[len]=\0;printf〃明文〃;puts c;int function〃系统功能选择页面int choice;printf,/==============================================================\n//;printf〃欢迎进入RSA算法\n〃;printf〃1--加密\n〃;printf〃2--解密\n〃;printf〃3--退出\n〃;printf〃=================================\n〃;printf〃请输入要选择的功能号〃;scanf〃%d〃,fechoice;return choice;int function;int fc;printf〃请输入初始明文小写〃);getss;//putss;RSAO;〃供应私钥和公钥while1fc=function;iffc==l〃加密encrypt;else iffc==2//解密decrypt;else iffc==3int mainbreak;elseprintf输入有误,请重新输入!/n〃;return0;。
个人认证
优秀文档
获得点赞 0