教学服务系统

 找回密码
 立即注册
搜索
查看: 619|回复: 3

信息计算2019级2班6号李靓

[复制链接]

8

主题

17

帖子

72

积分

注册会员

Rank: 2

积分
72
发表于 2022-4-22 14:48:56 | 显示全部楼层 |阅读模式

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

8

主题

17

帖子

72

积分

注册会员

Rank: 2

积分
72
 楼主| 发表于 2022-4-29 19:00:12 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

8

主题

17

帖子

72

积分

注册会员

Rank: 2

积分
72
 楼主| 发表于 2022-5-2 23:04:50 | 显示全部楼层
本帖最后由 李靓 于 2022-5-13 16:08 编辑

RSA(大数版本)
一、算法描述
1.输入p、q,满足:p,q是两个不同的素数
2.计算n=p*q,m=(p-1)(q-1)
3.输入满足条件的e:e(p-1)*(q-1)互质
4.计算d,要求(e*d)≡1(mod m)
5.生成密钥:公钥为(m,e),私钥为(m,d)
6.选择加密则输入明文生成密文;选择解密则输入密文生成明文
二、源代码
  1. #include <stdio.h>  

  2. int RSA(int a,int b,int c)  //计算密文

  3. {
  4.         int code=1;  
  5.        
  6.         for(b=b+1;b!=1;b--)
  7.         {
  8.                 code=code*a;  
  9.                 code=code%c;
  10.         }  

  11.         return code;  

  12. }  

  13. int IsPrime(int x) //判断是否为素数
  14. {
  15.         int i=2;
  16.         for(i=2;i<x+1;i++)
  17.         {
  18.                 if(x%i==0)
  19.                 break;
  20.          }
  21.          if(i<x)
  22.          return 0;
  23.                 

  24. }
  25. int main()  
  26. {
  27.         int p,q,m,n,e,d,x,y,z;  
  28.         printf("\n生成密钥\n\n");   
  29.         printf("请输入素数p,q: ");    //输入两个素数q,p
  30.         scanf("%d%d",&p,&q);
  31.         if(!IsPrime(p)||!IsPrime(q))
  32.                 printf("输入错误!请输入素数!");
  33.         else{
  34.        
  35.         n=p*q;
  36.         printf("n为%d\n",n);
  37.         m=(p-1)*(q-1);
  38.         printf("m为%d\n",m);
  39.         printf("请输入合适的整数e: ");
  40.         scanf("%d",&e);
  41.         if(e<1||e>m)
  42.         {
  43.                 printf("e输入错误,请重新输入: ");
  44.                 scanf("%d",&e);
  45.         }
  46.        
  47.         d=1;
  48.         while((e*d)%m!=1)
  49.                 d++;  
  50.         printf("密钥已生成!");
  51.         printf("\n\n");
  52.         printf("\t1.加密\n");   
  53.         printf("\t2.解密\n");
  54.         printf("\t3.退出\n");
  55.         printf("\n请选择功能:");   
  56.         scanf("%d",&z);
  57.         while(1)
  58.         {
  59.                 if(z==1)
  60.                 {
  61.                         printf("\t请输入明文: ");  //计算密文
  62.                         scanf("%d",&x);
  63.                         y=RSA(x,e,n);
  64.                         printf("\t密文为:%d\n",y);
  65.                 }
  66.                 else if(z==2)
  67.                 {
  68.                         printf("\t请输入密文: ");  //计算明文
  69.                         scanf("%d",&y);
  70.                         x=RSA(y,d,n);
  71.                         printf("\t明文为%d\n",x);
  72.                 }
  73.                 else break;
  74.                 printf("\n\n");
  75.                 printf("\t1.加密\n");   
  76.                 printf("\t2.解密\n");
  77.                 printf("\t3.退出\n");
  78.                 printf("\n请选择功能:");   
  79.                 scanf("%d",&z);
  80.                 }

  81.          return 0;

  82. }
  83. }
复制代码

二、运行结果



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

8

主题

17

帖子

72

积分

注册会员

Rank: 2

积分
72
 楼主| 发表于 2022-5-13 15:17:07 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

教学服务系统

GMT+8, 2025-4-30 11:05 , Processed in 0.015232 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表