您好,欢迎访问三七文档
RSA#includestdio.h//RSA算法intcandp(inta,intb,intc)//加解密算法,即实现幂的取余运算{intr=1;b=b+1;while(b!=1){r=r*a;r=r%c;b--;}printf(%d\n,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;printf(请输入两个素数p,q:);scanf(%d%d,&p,&q);n=p*q;printf(计算得n为%3d\n,n);t=(p-1)*(q-1);//求n的欧拉数printf(计算得t为%3d\n,t);printf(请输入公钥e,要求1et,并且与t互素:);scanf(%d,&e);if(e1||et||fun(e,t))//公钥要求1et,并且与t互素{printf(e不合要求,请重新输入:);//e1或et或e与t不互素时,重新输入scanf(%d,&e);}d=1;while(((e*d)%t)!=1)d++;//由公钥e求出私钥d,e*d=1(mod(p–1)*(q-1))printf(可得出d为%d\n,d);printf(加密请输入1\n);//加密或解密选择printf(解密请输入2\n);scanf(%d,&r);switch(r){case1:printf(请输入明文m:);//输入要加密的明文数字scanf(%d,&m);c=candp(m,e,n);//c=m^e*(modn)printf(密文为%d\n,c);break;case2:printf(请输入密文c:);//输入要解密的密文数字scanf(%d,&c);m=candp(c,d,n);//m=c^d*(modn)printf(明文为%d\n,m);break;}}
本文标题:RSA
链接地址:https://www.777doc.com/doc-6172732 .html