|

楼主 |
发表于 2022-5-2 23:04:50
|
显示全部楼层
本帖最后由 李靓 于 2022-5-13 16:08 编辑
RSA(大数版本) 3.输入满足条件的e:e与(p-1)*(q-1)互质 6.选择加密则输入明文生成密文;选择解密则输入密文生成明文 二、源代码- #include <stdio.h>
- int RSA(int a,int b,int c) //计算密文
- {
- int code=1;
-
- for(b=b+1;b!=1;b--)
- {
- code=code*a;
- code=code%c;
- }
- return code;
- }
- int IsPrime(int x) //判断是否为素数
- {
- int i=2;
- for(i=2;i<x+1;i++)
- {
- if(x%i==0)
- break;
- }
- if(i<x)
- return 0;
-
- }
- int main()
- {
- int p,q,m,n,e,d,x,y,z;
- printf("\n生成密钥\n\n");
- printf("请输入素数p,q: "); //输入两个素数q,p
- scanf("%d%d",&p,&q);
- if(!IsPrime(p)||!IsPrime(q))
- printf("输入错误!请输入素数!");
- else{
-
- n=p*q;
- printf("n为%d\n",n);
- m=(p-1)*(q-1);
- printf("m为%d\n",m);
- printf("请输入合适的整数e: ");
- scanf("%d",&e);
- if(e<1||e>m)
- {
- printf("e输入错误,请重新输入: ");
- scanf("%d",&e);
- }
-
- d=1;
- while((e*d)%m!=1)
- d++;
- printf("密钥已生成!");
- printf("\n\n");
- printf("\t1.加密\n");
- printf("\t2.解密\n");
- printf("\t3.退出\n");
- printf("\n请选择功能:");
- scanf("%d",&z);
- while(1)
- {
- if(z==1)
- {
- printf("\t请输入明文: "); //计算密文
- scanf("%d",&x);
- y=RSA(x,e,n);
- printf("\t密文为:%d\n",y);
- }
- else if(z==2)
- {
- printf("\t请输入密文: "); //计算明文
- scanf("%d",&y);
- x=RSA(y,d,n);
- printf("\t明文为%d\n",x);
- }
- else break;
- printf("\n\n");
- printf("\t1.加密\n");
- printf("\t2.解密\n");
- printf("\t3.退出\n");
- printf("\n请选择功能:");
- scanf("%d",&z);
- }
- return 0;
- }
- }
复制代码
二、运行结果
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|