RSA加密解密算法c语言程序

RSA加密解密算法c语言程序

ID:47056005

大小:36.51 KB

页数:5页

时间:2019-07-10

RSA加密解密算法c语言程序_第1页
RSA加密解密算法c语言程序_第2页
RSA加密解密算法c语言程序_第3页
RSA加密解密算法c语言程序_第4页
RSA加密解密算法c语言程序_第5页
资源描述:

《RSA加密解密算法c语言程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、#include#include#include//将十进制数转换成二进制,用于检验大素数p和qintzhuan_huan(intb,inta[],intk){intt,temp=-1;while(b>0){t=b%2;temp++;a[temp]=t;b=b/2;}returntemp;}//欧几里得算法,用于判断加密指数e是否符合要求intgcd(intn,intb){intr1=n,r2=b,r;while(r2>0){r=r1%r2;r1=r2;r2=r;}returnr1;}//扩展欧几里得算法求乘法逆元,即求解密指数din

2、textend(intn,intb){intq,r,r1=n,r2=b,t,t1=0,t2=1,i=1;while(r2>0){q=r1/r2;r=r1%r2;r1=r2;r2=r;t=t1-q*t2;t1=t2;t2=t;}if(t1>=0)returnt1%n;else{while((t1+i*n)<0)i++;returnt1+i*n;}}//检验大素数,符合要求返回1,否则返回0intWitness(inta,intn){intd=1,k,r=n-1,i,x,b[1000];k=zhuan_huan(r,b,1000);for(i=k;i>=0;i--){x=d;d=(d*d)%n;

3、if((d==1)&&(x!=1)&&(x!=n-1))return0;if(b[i]==1)d=(d*a)%n;}if(d!=1)return0;elsereturn1;}//快速计算模指数intjs_mod(inta,intb,intn){intx=0,y=1,k,i,s[1000];k=zhuan_huan(b,s,1000);for(i=k;i>=0;i--){x=2*x;y=(y*y)%n;if(s[i]==1){x++;y=(y*a)%n;}}returny;}//主函数。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。voidmain(){i

4、ntp,q,e,d,n,yn,m[1000],c[10000];//c[10000]存放加密后的数字密文,m[1000]存放解密后的数字明文,即英文明文在zimu_biao[69]中的下标。inti,j;//i,j用于循环遍历数组intmi_yue;//用户输入的密钥intcount=1;//统计输入密钥的次数,count>3时将不允许用户再输入。charmin_wen[1000],re_min_wen[1000];//分别为用户输入的明文、密文,解密后的明文。//密钥生成charzimu_biao[69]="abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMN

5、OPQRSTUVWXYZ0123456789'.?!";printf("请输入您要发送的明文文件(小写英文表示):");printf("******************************************************");gets(min_wen);printf("******************************************************");printf("加密开始,请按要求操作。。。");printf("请输入第一个大素数p:");while(1){scanf("%d",&p);if(Witness

6、(2,p)==1){printf("您输入的第一个大素数%d符合要求",p);break;}elseprintf("您输入的%d不是素数,请重新输入:",p);}printf("请输入第二个大素数q:");while(1){scanf("%d",&q);if(Witness(2,q)){printf("您输入的第二个大素数%d符合要求",q);break;}elseprintf("您输入的%d不是素数,请重新输入:",q);}n=p*q;yn=(p-1)*(q-1);printf("请输入加密指数(整数)e,且0

7、e(1){scanf("%d",&e);if(gcd(yn,e)==1){printf("您输入加密指数%d与%d互素,符合要求",e,yn);break;}elseprintf("您输入加密指数%d与%d不互素,请重新输入。。。",e,yn);}d=extend(yn,e);//求解密指数dprintf("请记住您的两个大素数分别为p=%d(保密),q=%d(保密),模数n=%d(公开),欧

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。