RSA算法C语言代码
#include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#include <time.h>char s100,*c;int n,e,d,i,C,j,k=0,len;int str100,b30;unsigned gcd(unsigned a, unsigned b ) if(a%b=0)return b;elsereturn gcd(b,a%b);void Egcd(int a, int b,int &x, int &y) /ax-by=1 if(b=0|a=0)x=1;y=0;return ;if(a<b)Egcd(a,b%a,x,y); x=(int)(b*y+1)/a;elseEgcd(a%b,b,x,y);y=(int)(a*x-1)/b;void RSA()int p,q,N,Y;printf("请输入素数p和q:");scanf("%d %d",&p,&q);n=p*q;初始化随机数产生随机整数e, e与N互质去掉 s100 中的空格N=(p-1)*(q-1);/printf("n=%d N=%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=%d Y=%dn",d,Y);printf(" 公钥 PU=e=%d,n=%dn",e,n); printf(" 私钥 PR=d=%d,n=%dn",d,n);void encrypt() /加密函数len=strlen(s);/hgprintf("len=%dn",len);for(i=0;i<len;i+) /if(si<97|si>122)bk=i;k+;for(j=i;j<len-1;j+) sj=sj+1;len-;slen='0' /结束符printf(" 密文是: "); for(i=0;i<len;i+)C=1; /printf("shiji=%dn",si-97); for(int j=0;j<e;j+) C=(C*(si-97)%n;/ printf("C=%ldn",C); stri=C;printf("%d ",stri); printf("n");void decrypt() / 解密函数 c=(char*)malloc(len*sizeof(int);for(i=0;i<len;i+) / 实现解密 C=1;for(int j=0;j<d;j+) C=(C*(stri)%n;/ printf("C=%ldn",C); / printf("C=%dn",C); ci=C+97;ci = '0'/ puts(c);for(int z=0;z<k;z+) / 加空格 for(i=0; i<len; i+)if (i=bz) for(j=len;j>i;j-) cj=cj-1; ci=' ' len+; bz+1=bz+1+(z+1); break;clen = '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",&choice);return choice;int main()int function();int fc;( 小写 ) : ");提供私钥和公钥加密解密printf(" 请输入初始明文 gets(s);/ puts(s);RSA();/while(1)fc=function();if(fc=1)/encrypt();else if(fc=2)/decrypt() ;else if(fc=3)break;elseprintf(" 输入有误,请重新输入! /n");return 0;Welcome !欢迎您的下载,资料仅供参考!