一、恺撒密码简介

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

根据偏移量的不同,还存在若干特定的恺撒密码名称:

  • 偏移量为10:Avocat(A→K)
  • 偏移量为13:ROT13
  • 偏移量为-5:Cassis (K 6)
  • 偏移量为-6:Cassette (K 7)

二、C++简单实现

 1#include <bits/stdc++.h>
 2using namespace std;
 3
 4const int SIZ = 100000;
 5char src[SIZ], enc[SIZ];
 6
 7void caesar(char src[], char enc[], int key)
 8{
 9    key %= 26;
10    for (int i=0; src[i]; i++)
11    {
12        if ((src[i]<'A') || (src[i]>'Z' && src[i]<'a') || src[i]>'z') {
13            enc[i] = src[i]; continue;
14        }
15
16        if (src[i] >= 'a')
17            enc[i] = (src[i] - 'a' + key + 26) % 26 + 'a';
18        else
19            enc[i] = (src[i] - 'A' + key + 26) % 26 + 'A';
20    }
21}
22
23int main()
24{
25    system("chcp 65001");
26    while (1)
27    {
28        printf("-- 凯撒密码 加/解密 -- \n");
29        printf("1. 加密 \n2. 解密 \n3. 退出 \n");
30
31        int select, key; scanf("%d", &select);
32        if (select == 3) break;
33
34        printf("请输入原文: "); scanf("%s", src);
35        printf("请输入密钥: "); scanf("%d", &key);
36
37        if (select == 2) key = -key;
38        memset(enc, 0, sizeof(enc));
39
40        caesar(src, enc, key); printf("密文: %s\n", enc);
41        system("pause"); system("cls");
42    }
43    return 0;
44}
45
46/*
47abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
48*/