一、恺撒密码简介
在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。
根据偏移量的不同,还存在若干特定的恺撒密码名称:
- 偏移量为10:Avocat(A→K)
- 偏移量为13:ROT13
- 偏移量为-5:Cassis (K 6)
- 偏移量为-6:Cassette (K 7)
二、C++简单实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| #include <bits/stdc++.h> using namespace std;
const int SIZ = 100000; char src[SIZ], enc[SIZ];
void caesar(char src[], char enc[], int key) { key %= 26; for (int i=0; src[i]; i++) { if ((src[i]<'A') || (src[i]>'Z' && src[i]<'a') || src[i]>'z') { enc[i] = src[i]; continue; }
if (src[i] >= 'a') enc[i] = (src[i] - 'a' + key + 26) % 26 + 'a'; else enc[i] = (src[i] - 'A' + key + 26) % 26 + 'A'; } }
int main() { system("chcp 65001"); while (1) { printf("-- 凯撒密码 加/解密 -- \n"); printf("1. 加密 \n2. 解密 \n3. 退出 \n");
int select, key; scanf("%d", &select); if (select == 3) break;
printf("请输入原文: "); scanf("%s", src); printf("请输入密钥: "); scanf("%d", &key);
if (select == 2) key = -key; memset(enc, 0, sizeof(enc));
caesar(src, enc, key); printf("密文: %s\n", enc); system("pause"); system("cls"); } return 0; }
|