浅析加密算法一凯撒密码

Posted MangataTS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅析加密算法一凯撒密码相关的知识,希望对你有一定的参考价值。

文章目录

一、简介

在密码学中,恺撒密码(英语:Caesar cipher),或称 恺撒加密、恺撒变换、变换加密 ,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是 3 3 3 的时候,所有的字母 A A A 将被替换成 D D D B B B 变成 E E E ,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

恺撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。恺撒密码还在现代的 ROT13 系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。

二、原理

凯撒密码加密的时候会将 明文 中的每个字母在字母表中往后移动 一定的长度 ,如果往后移动的长度超过了字母表的长度,那么就用当前字母的位置数加上偏移的数量 对字母表的长度取余 这个余数就是该字母加密后在字母表中的位置

(下标从 0 0 0 开始计算)例如我们的明文字母在字母表中的下标是 4 4 4,凯撒加密需要移动 30 30 30 位,而总字母表的长度是 26 26 26 ,那么加密后的字母位置就是 ( 4 + 30 ) (4+30) % 26 = 8 (4+30) ,其实就是一个循环的效果

具体的例子,如果我们的偏移量是 3 3 3

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC

由于加密的时候是往右偏移的,那么解密只需要同理往左偏移即可

根据偏移量的不同,凯撒的名称也不同,常见的有:

  • 偏移量为 10:Avocat
  • 偏移量为 13:ROT13
  • 偏移量为 -5:Cassis
  • 偏移量为 -6:Cassette

三、例题

题目链接: http://acm.mangata.ltd/p/S1

四、代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define endl "\\n"
#define PII pair<int,int>
#define INF 0x3f3f3f3f

bool check(char c)
	if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
		return true;
	return false;


void slove()
	string S;
	int p;
	getline(cin,S);
	cin>>p;
	int n = S.size();
	for(int i = 0;i < n; ++i)
		if(check(S[i]))
			S[i] = ((toupper(S[i]) - 'A' + p) % 26) + 'A';
	
	cout<<S<<endl;


int main()

	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	
	slove();
	
	return 0;

以上是关于浅析加密算法一凯撒密码的主要内容,如果未能解决你的问题,请参考以下文章

凯撒加密算法(最简单的对称加密)

jmu-python-凯撒密码加密算法,谢谢

什么是凯撒加密法?

7-30 jmu-python-凯撒密码加密算法 (10 分)

凯撒密码实现英文短句的加解密

凯撒密码加密解密--JAVA实现(基础)