RSA的C语言算法实现

RSA的C语言算法实现

ID:46580172

大小:116.03 KB

页数:3页

时间:2019-11-25

RSA的C语言算法实现_第1页
RSA的C语言算法实现_第2页
RSA的C语言算法实现_第3页
资源描述:

《RSA的C语言算法实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、RSA算法的C语言实现一、RSA算法的描述1、选取长度相等的两个大素数p和q,计算其乘积:n=pq然后随机选取加密密钥e,使e和(p–1)(q–1)互素。最后用欧几里德扩展算法计算解密密钥d,以满足ed=1(mod(p–1)(q–1))即d=e–1mod((p–1)(q–1))e和n是公钥,d是私钥2、加密公式如下:ci=mi^e(modn)3、解密时,取每一密文分组ci并计算:mi=ci^d(modn)Ci^d=(mi^e)^d=mi^(ed)=mi^[k(p–1)(q–1)+1]=mimi^[k(p–1)(q–1)]=mi*1=mi4、消息也可以用d加密用e解密二、C源

2、程序//RSA算法的C程序实现#includeintcandp(inta,intb,intc)//数据处理函数,实现幂的取余运算{intr=1;b=b+1;while(b!=1){r=r*a;r=r%c;b--;}printf("%d",r);returnr;}intfun(intx,inty)//公钥e与t的互素判断{intt;while(y){t=x;x=y;y=t%y;}if(x==1)return0;//x与y互素时返回0elsereturn1;//x与y不互素时返回1}voidmain(){intp,q,e,d,m,n,t,c,r;print

3、f("请输入两个素数p,q:");scanf("%d%d",&p,&q);n=p*q;printf("计算得n为%3d",n);t=(p-1)*(q-1);//求n的欧拉数printf("计算得t为%3d",t);printf("请输入公钥e:");scanf("%d",&e);if(e<1

4、

5、e>t

6、

7、fun(e,t)){printf("e不合要求,请重新输入:");//e<1或e>t或e与t不互素时,重新输入scanf("%d",&e);}d=1;while(((e*d)%t)!=1)d++;//由公钥e求出私钥dprintf("经计算d为%d",d);pr

8、intf("加密请输入1");//加密或解密选择printf("解密请输入2");scanf("%d",&r);switch(r){case1:printf("请输入明文m:");//输入要加密的明文数字scanf("%d",&m);c=candp(m,e,n);printf("密文为%d",c);break;case2:printf("请输入密文c:");//输入要解密的密文数字scanf("%d",&c);m=candp(c,d,n);printf("明文为%d",m);break;}}三、程序运行结果及相关说明主函数实现求N的欧拉数、由公钥求解私钥、加

9、密解密选择以及相应的密文明文输出。子函数candp实现加密解密时的求幂取余运算,fun实现e与t的互素判断,已验证e是否符合要求。程序主体参考了网上的相关RSA算法程序,我对其中e的合法性判断、主函数实现的顺序以及相关提示信息做了补充与修改并加上了注释,这样程序可读性更强,运行时更容易操作,思路也更加严密。当P=43,q=59时,对134进行加密,运行结果如下:第一次取e为15,与t不互素,提示需重新输入,输入13后,便可以进行正确操作。由于int型变量为十六位,因此n最大只能小于65536,此程序只是对RSA算法的入门,无法实现达到安全要求的数据位数。

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

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

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