A。凯撒密码

题意:

给你k1,k2,和一串明文,一串密文。

明文用k1加密,密文用k2解密。

对于明文要把字母转换成大写字母,非字母全部删除。

额:要考虑到取模可能会变成负数,所以要加一下26再取模。

代码:

#include<stdio.h>
#define N 85
int k1, k2;
char plain[N], cipher[N];
void init(char s[]) //预处理,转换为大写字母
{int i;for(i = 0; s[i]; i++)if(s[i] >= 'a' && s[i] <= 'z')s[i] = s[i] - 'a' + 'A';
}
void encrypt(char s[],int k,int f)//加解密
{init(s);int i;for(i = 0; s[i]; i++)if(s[i] >= 'A' && s[i] <= 'Z')printf("%c", ((s[i] - 'A' + k*f + 26) % 26  + 'A'));printf("\n");
}
int main()
{scanf("%d,%d ", &k1, &k2);gets(plain);gets(cipher);encrypt(plain,k1,1);encrypt(cipher,k2,-1);return 0;
}

B。RSA加密

题意:

给你n,e,和一串明文。用(n,e)加密明文。将明文字母转换成数字,按8位数字分段,不足部分补足0。明文中有非字母删除,A和a转成数字都是00, Z和z转成数字都是25。明文数字8位分段的每一段对应的密文也要求是8位,如果不足8位,前面补足0。

对于明文要把字母转换成大写字母,非字母全部删除。

补充:

RSA加密就是字母转化为两位数字,分段处理,比如每八个一段,M为明文数字段,C为密文数字段,C=Me%n。

代码:

#include<stdio.h>
#include<string.h>
#define N 1000
#define ll long long
ll n, e;
char plain[N];
ll qpow(ll a, ll b)//快速幂
{ll k = a % n;ll ans = 1;while(b){if(b & 1)ans = (ans * k ) % n;k = ( k * k) % n;b >>= 1;}return ans;
}
void init(char s[]) //预处理,转换为大写字母
{int i;for(i = 0; s[i]; i++)if(s[i] >= 'a' && s[i] <= 'z')s[i] = s[i] - 'a' + 'A';
}
void encrypt(char s[]) //加密
{init(s);int k = 0,i;ll block = 0;for(i = 0; s[i]; i++)if(s[i] >= 'A' && s[i] <= 'Z') //如果是字母
        {block = block * 100 + (s[i] - 'A') ; //明文对应的数字串k++;if(k == 4) //够8位数字时
            {printf("%08lld", qpow(block, e) % 100000000);//输出密文,这个模不知道是不是必须的,题目没说n的上限block = 0;k = 0;}}if(k)//剩下的明文要后面补零
    {while(k != 4){block = block * 100;k++;}printf("%08lld", qpow(block, e) % 100000000);}
}
int main()
{//  freopen("in.txt", "r", stdin);scanf("%lld%lld ", &n, &e);gets(plain);encrypt(plain);return 0;
}

C。RSA解密

题意:

给你n,e,和一串明文。用(n,e)加密明文。将明文字母转换成数字,按8位数字分段,不足部分补足0。明文中有非字母删除,A和a转成数字都是00, Z和z转成数字都是25。明文数字8位分段的每一段对应的密文也要求是8位,如果不足8位,前面补足0。

对于明文要把字母转换成大写字母,非字母全部删除。

补充:

RSA加密就是字母转化为两位数字,分段处理,比如每八个一段,M为明文数字段,C为密文数字段,C=Me%n。

代码:

#include<stdio.h>
#include<string.h>
#define N 802
#define ll long long
ll n, e, p, q, d, x, y;
char cipher[N << 1], plain[10];
ll exgcd(ll a, ll b)//扩展欧几里德求逆元
{if(b == 0){x = 1;y = 0;return a;}ll r = exgcd(b, a % b);ll tmp = x;x = y;y = tmp - a / b * y;return r;
}
ll qpow(ll a, ll b)//快速幂
{ll k = a % n;ll ans = 1;while(b){if(b & 1)ans = (ans * k ) % n;k = ( k * k) % n;b >>= 1;}return ans;
}
void init()//求p和q,和d
{int i;for(i = 2; i < n; i++)if(n % i == 0){p = i;q = n / i;break;}ll M;M = (p - 1) * (q - 1);exgcd(e, M);d = (x % M + M) % M;//求e的逆元d
}
void decrypt() //解密
{ll block = 0;int k = 0, i, j;for(i = 0; cipher[i]; i++){block = block * 10 + cipher[i] - '0';//密文从字符串中取出来k++;if(k == 8)//密文达到8位数字时
        {memset(plain, 0, sizeof plain);//清空明文字符串block = qpow(block, d);//计算明文数字串for(j = 3; j >= 0; j--)//每次计算两位数字并存在明文字符串中,因为从后面往前取,所以倒过来存
            {plain[j] = block % 100 + 'A';//取最后面两个数字block /= 100;//去掉最后面两个数字
            }printf("%s", plain);//输出明文k = 0;//清空计数器
        }}
}
int main()
{//  freopen("in.txt", "r", stdin);scanf("%lld%lld ", &n, &e);gets(cipher);init();printf("%d\n", d);decrypt();return 0;
}

【kAriOJ】离散数学春季学期编程测试 1相关推荐

  1. 2021春季学期-创新设计与实践-课程结构设计

    ▌01 课程背景 根据2021年之初,与自动化系张长水教授讨论,对于 2021春季学期-创新设计与实践-高级下 中关于工程部分(智能控制)内容,进行了初步的设计,详细参见: CDIE-2021春季课程 ...

  2. HIT-2022年春季学期《软件构造》Lab 1实验心得

    目录 2022年春季学期计算学部<软件构造> 课程Lab 1实验心得 1.实验目标概述 2.实验环境配置 3.实验过程 3.1 Magic Squares ​​​​​​​3.2 Turtl ...

  3. OO第四单元小结暨2019春季学期OO课程总结

    OO第四单元小结暨2019春季学期OO课程总结 目录: OO第四单元总结 一.总结本单元两次作业的架构设计 第一次作业 第二次作业 学期最终总结 二.四个单元中架构设计及OO方法理解 2.1 第一单元 ...

  4. 信号与系统 2022 春季学期第一次作业-作业题目准备

    简 介: 关于作业的参考答案需要根据之前结果,再结合现在的修改进行补充. 关键词: 作业,信号与系统 #mermaid-svg-HSmAT7ir1Kl95O1z {font-family:" ...

  5. 2021年春季学期-信号与系统-第二次作业参考答案-第十小题

    本文是 2021年春季学期-信号与系统-第二次作业参考答案 的参考答案. ▌第十题 10 从网络学堂下载代表两个信号的音频文件: 音频文件: f1(t)f_1 \left( t \right)f1​( ...

  6. 2021春季学期-创新设计与实践-Lesson4

    文章目录 ▌01 创新设计与实践 1.课程背景 2.同学分组 ▌02 课程内容设计 CI41 OpenCV简介 (1)OpenCV简介 CI411 (2)OpenCV安装 CI412 CI42 Ope ...

  7. 2021春季学期-创新设计与实践-Lesson3

    ▌01 创新与实践课程 1.课程背景 2021春季学期教学记录 课程中包括一门 2021春季学期-创新设计与实践-高级下 ,这个班级总共包括有10名来自于清华大学新雅学院的同学. 根据 2021春季学 ...

  8. 2019春季学期期末总结

    2019春季学期期末总结作业 一.我学到的内容 二.我的收获 作业连接 收获 第二周作业 文件的建立 第三周作业 二维数组 第四周作业 选择排序法 第五周作业 字符串数组 第六周作业 指针 第七周作业 ...

  9. 2019年春季学期第四周作业Compile Summarize

    这个作业属于哪个课程 C语言程序设计一 这个作业要求在哪里 2019春季学期第四周作业 我的课程目标 重新学习有关数组的问题 这个作业在哪个具体方面帮助我实现目标 对于置换有了新的见解 参考文献 中国 ...

最新文章

  1. gulp 配置自动化前端开发
  2. 苹果手机怎么设置时间24小时制_外媒实测苹果iPhone 12续航:5G网络下表现不佳...
  3. 李彦宏AI布局又下一城,成立生命科学公司“百图生科”
  4. 梦幻西游手游服务器维护时段,梦幻西游手游2018合区时间服务器汇总详解
  5. MIT:机器学习预测2018世界杯冠军
  6. 启动nginx服务提示 nginx: [emerg] still could not
  7. GitHub 与 git 笔记 。
  8. 实验8.2 指针与字符串 7-2 字符串排序
  9. iphone屏幕突然变暗_如果你的iPhone屏幕突然变暗,可以这样解决
  10. pip install win32api报错解决方法
  11. 1.SRE:Google运维解密 --- 介绍
  12. 浅谈JavaScript设计模式
  13. 阿里云STMP邮箱验证
  14. 网络爬虫——前程无忧网数据获取及MYSQL存储
  15. 部门来了一位前阿里的大神…
  16. GNSS 使用DFT算法 能量损耗仿真
  17. 棋圣高调搬弄名人日本棋圣挟五冠搬弄对手
  18. 【后续还会补充】Sublime Text 4 常用插件安装及配置方法
  19. Installation failed due to: ‘-99‘ OPPO手机
  20. 在线问答与科学管理系统

热门文章

  1. 初学者选黑卡还是微单_入门单反和微单相机该买哪个
  2. DevExtreme 学习应用[1]
  3. iOS 使用UI控件的外观协议UIAppearance进行设置默认UI控件样式
  4. 程序员只拿到5千工资吐槽无法生活,网友:别在意薪资
  5. 阅读笔记1(面试题功能测试-自动化提升效率)
  6. spring(16)------spring的数据源配置
  7. 欧拉路径 之 poj 2513 Colored Sticks
  8. Django中的常用命令
  9. 前端开发的开始---基于OO的Ajax类
  10. jsp connection DB