文章目录
一、简介二、原理三、例题四、代码一、简介
在密码学中,恺撒密码(英语:Caesar cipher
),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是 333 的时候,所有的字母 AAA 将被替换成 DDD ,BBB 变成 EEE ,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。
恺撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。恺撒密码还在现代的ROT13
系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。
二、原理
凯撒密码加密的时候会将明文中的每个字母在字母表中往后移动一定的长度,如果往后移动的长度超过了字母表的长度,那么就用当前字母的位置数加上偏移的数量对字母表的长度取余这个余数就是该字母加密后在字母表中的位置
(下标从 000 开始计算)例如我们的明文字母在字母表中的下标是 444,凯撒加密需要移动 303030 位,而总字母表的长度是 262626 ,那么加密后的字母位置就是 (4+30)(4+30) % 26 = 8(4+30) ,其实就是一个循环的效果
具体的例子,如果我们的偏移量是 333 :
明文字母表: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 0x3f3f3f3fbool check(char c){if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')return true;return false;}void Caesar(){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;}
如果觉得《浅析加密算法一【凯撒密码】》对你有帮助,请点赞、收藏,并留下你的观点哦!