凯撒加解密和破解

news/2024/11/17 4:42:43/

简单介绍

        古典密码学是最基础的密码学问题,在古典密码学中,最为经典的就是凯撒密码。我们在这里简单介绍一下凯撒密码。

        凯撒密码又称为凯撒加密,凯撒变换,变换加密,是一种最简单且为广为人知的加密技术。他就是一种替换加密。在明文中使用字母进行前移(或后退)的方法进行替换对应的字母。

 这个图展示了简单的凯撒密码加密。在这个图中,我们的凯撒加密是通过对字母进行循环后移3位。也就是A被替换成D,B替换成E,对于最后三位X,Y和Z,我们通过循环,即从头开始对应,得到X替换成A,Y替换成B,Z替换成C。

使用样例

编写代码回答下面问题:

1. 输入任意明文和秘钥K=10,对其进行凯撒加密。

2. 输入密文和秘钥K=10,对其进行凯撒解密。

3. 破译如下密文:Izqzm piyzmznodhvoz tjpm kjrzm oj xcvibz tjpmnzga!

解答:

问题1

我们可以通过计算公式y = (x+k) mod 26进行计算。

代码如下:

#include <bits/stdc++.h>using namespace std;int main(){string a;getline(cin, a);int K = 10;int n = a.length();for (int i = 0; i < n;i++){if(a[i]>'p'){a[i]=a[i] - 26+K;}else if(a[i] ==' '){a[i] = a[i];}else{a[i] += K;}cout << a[i];}cout << "\n";return 0;
}

问题2

我们通过公式x = (y-k) mod 26计算

#include <bits/stdc++.h>using namespace std;int main(){string a;getline(cin, a);int K = 10;int n = a.length();for (int i = 0; i < n;i++){if((a[i] < 'k' and a[i]>='a') or (a[i]<'K' and a[i]>='A')){a[i] = a[i] + 26-K;}else if(a[i] ==' '){a[i] = a[i];}else if(a[i]<'A' or (a[i]>'Z' and a[i]<'a') or a[i]>'z'){a[i] = a[i];}else{a[i] -= K;}cout << a[i];}cout << "\n";return 0;
}

问题3

在这里我们需要将所给的密文进行还原,但是我们又不知道秘钥K为多少,这里我们就不能简单的得到结果。使用问题2的办法进行解密,我们这里K的取值很多,可以是1,2,3······25,一共有25种可能。由于凯撒密码比较简单,计算也不复杂,将这25种可能都枚举一次对于计算机而言,还是很简单的,速度还是很快的,所以我们在这里可以使用暴力求解的方法,将K从1到25进行取值求取明文,最后使用肉眼进行区别真正的明文到底是25个明文中哪一个。

代码如下:

#include<bits/stdc++.h>using namespace std;int main(){string a;getline(cin, a);int n = a.length();for (int K = 1; K <= 25;K++){for (int i = 0; i < n;i++){if((a[i] < 'a'+K and a[i]>='a') or (a[i]<'A'+K and a[i]>='A')){a[i] = a[i] + 26-K;}else if(a[i] ==' '){a[i] = a[i];}else if(a[i]<'A' or (a[i]>'Z' and a[i]<'a') or a[i]>'z'){a[i] = a[i];}else{a[i] -= K;}cout << a[i];}cout << "\n";}return 0;
}


http://www.ppmy.cn/news/789676.html

相关文章

暴发户与贵族

相比于中国现在最容易提出的一个词“官二代”“富二代”&#xff0c;我们还可以提出一个新概念&#xff0c;那就是“欧美新贵族”。以 欧美历史来看&#xff0c;近年来产生的沃伦巴菲特、 比尔盖茨&#xff0c;和奥巴马&#xff0c;这种富有精神领袖气质的新富人&#xff0c;我…

American Heritage美国血统

American Heritage美国血统 译 By TinyTony 描述 农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛们的家谱作成二叉树&#xff0c;并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而不是用图形的方法。 …

P1827 美国血统 American Heritage

题目描述&#xff1a; 农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛们的家谱作成二叉树&#xff0c;并且把二叉树以更线的”树的中序遍历“和”树的前序遍历“的符号加以记录而不是用图形的方法。 你的任务是在被给予奶牛家谱的”树…

P1827 [USACO3.4]美国血统 American Heritage

P1827 [USACO3.4]美国血统 American Heritage 由前序遍历 中序遍历求后序遍历。 主要方法是找根节点在中序遍历中的位置 char *p;p(char *)malloc(sizeof(char)*N);cin>>p;char *i;int nstrlen(p);for(ip;i<pn;i) {if(*i5) break;}cout<<i-p;输入12345时&…

USACO 3.4.2 American Heritage 美国血统

题目描述: 3.4.2 American Heritage (heritage) (heritage.pas/c/cpp) 农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛们的家谱作成二叉树&#xff0c;并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而不…

P80W,贵族的新衣,山寨的血统

近日&#xff0c;在苏宁看到P80W&#xff0c;一打听竟是先锋公司产品。 不吃一惊&#xff0c;2005年左右就知道Pionner这个公司了&#xff0c;在影音娱乐产品、光驱领域有不小名气&#xff0c;俺家05年那台机子用的光驱就是它家的牌子。 线索一&#xff0c;在苏宁易购上看到…

P1827 [USACO3.4] 美国血统 American Heritage

题目描述 农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛 们的家谱作成二叉树&#xff0c;并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法。 你的任务是在被给予奶牛家谱的“树中序遍历…

基于Django 的 多摄像头实时显示系统优化 -- 消息队列与任务队列的命中逻辑判定

文章大纲 消息队列定长队列实现控制最大消息数如何快速取一批特定数量的数据业务逻辑判断实时任务的判断定时任务的判断参考文献与学习路径deque关于django 配置文件内容传递给 template 的提问消息队列 定长队列实现控制最大消息数 要实现一个定长队列,可以使用Python中的c…