喜迎
春节

3.1 凯撒密码:把字母表“转”起来


在所有密码中,凯撒密码可能是最简单、最著名的一个。它的名字来自古罗马的凯撒大帝——据说他喜欢用这种方式与远方的将领通信。方法简单到连小学生都能理解:把每个字母在字母表中向后(或向前)移动固定的位置。

怎么玩?

假设我们约定把每个字母向后移动3位。那么:

  • A 变成 D
  • B 变成 E
  • C 变成 F
  • ……
  • X 变成 A
  • Y 变成 B
  • Z 变成 C

注意看,到了字母表末尾,我们绕回了开头。这就像把一个圆形的字母表“转”了一下。

举个经典的例子,凯撒曾说过一句著名的拉丁语:“VENI VIDI VICI”(我来,我见,我征服)。用向后移3位的凯撒密码加密后,就变成了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
VY
EH
NQ
IL
空格保持不变
VY
IL
DG
IL
空格
VY
IL
CF
IL

结果就是:YHQL YLGL YLFL

你看,原本豪情万丈的宣言,瞬间变成了毫无意义的字母组合。不知道规则的人看到它,只会一头雾水。而知道“向后移3位”这个规则的将领,只要把每个字母向前移3位,就能轻松还原出凯撒的原话。

用数学说话

凯撒密码的背后其实有一个简单的数学公式。如果用数字0~25分别代表字母A~Z,那么加密过程可以写成:

C = (P + k) mod 26

解密则是:

P = (C - k) mod 26

这里,P是明文字母对应的数字,C是密文字母对应的数字,k是移位的位数(密钥)。mod 26的意思是“除以26取余数”,用来处理绕回字母表开头的情况。

用这个公式,你可以很方便地写出程序来实现凯撒密码——实际上,几行Python代码就能搞定。

不止一种凯撒密码

虽然凯撒本人常用的是向后移3位,但这个数字完全可以换成别的。移1位、移5位、甚至移13位都可以。历史上还出现过一种叫ROT13的变种,它固定将字母向后移13位。有趣的是,由于26正好是13的两倍,加密两次就回到了原文——所以ROT13常常被用来在网络上“隐藏”剧透或谜底,而不是真正的保密。

凯撒密码的优点与致命伤

凯撒密码最大的优点就是简单。不需要复杂的工具,用脑子想想就能算出来。在古罗马时代,识字率本就不高,懂得拉丁文的人更少,敌人就算截获了密信,也很难立刻反应过来。所以,它在一段时间内是有效的。

但它的弱点同样明显:密钥空间太小了

所谓“密钥空间”,就是所有可能的密钥数量。对于凯撒密码,可能的移位数只有25种(移0位没意义,移26位等于没移)。只要你知道这是凯撒密码,完全可以一个一个去试——这叫暴力破解。用电脑试25种可能,连一秒都用不了。

更致命的是,一旦确定移位数,同一个字母永远被加密成同一个密文字母(比如A永远变成D)。这个特性让它在面对频率分析时毫无招架之力——我们会在3.3节详细讲这个问题。

历史意义

尽管脆弱,凯撒密码在密码学史上有着不可替代的地位。它是最早的有记录的密码之一,开创了“替换密码”这一大类。更重要的是,它体现了现代密码学的几个核心原则:

  • 算法公开,密钥保密:凯撒密码的算法(移位)人人皆知,但具体的移位数(密钥)必须保密。
  • 对称加密:加密和解密用的是同一个密钥(相同的移位数)。

两千多年后,这些原则依然指导着最先进的密码系统。

动手实验

现在,轮到你了。试着用纸笔加密下面这句话(用向后移5位):

HELLO WORLD

或者,如果你会一点Python,可以试试这段简单的代码:

1
2
3
4
5
6
7
8
9
10
11
def caesar_encrypt(text, shift):
result = ""
for char in text:
if char.isalpha():
ascii_offset = 65 if char.isupper() else 97
result += chr((ord(char) - ascii_offset + shift) % 26 + ascii_offset)
else:
result += char
return result

print(caesar_encrypt("VENI VIDI VICI", 3))

运行一下,看看是不是输出了 YHQL YLGL YLFL

凯撒密码虽然简单,但它是一把钥匙,打开了密码学的大门。接下来,我们将看到更复杂的替换密码——它们试图克服凯撒密码的弱点,但最终又会遇到新的问题。这正是密码学永恒的魅力:每一次进步,都会引来新的挑战。


文章作者: Crazy Boy
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Crazy Boy !
评 论
 上一篇
第4章 换位游戏:位置的艺术
第4章 换位游戏:位置的艺术
替换密码的故事告一段落。你学会了如何用另一个字母“伪装”自己,也见识了频率分析如何撕下这层伪装。现在,是时候换一个思路了。 如果我说,有一种加密方式,它不改变任何字母本身,只是把它们的位置重新排列,就能藏住秘密——你信吗? 这听起来有点像小
2026-03-12
下一篇 
3.2 单表替换:固定的秘密对照表
3.2 单表替换:固定的秘密对照表
凯撒密码虽然简单,但它有一个明显的限制:移位必须是统一的,A往后移3位变成D,那B就一定变成E,C一定变成F……这种“线性”的对应关系,让密钥只有25种可能,敌人一试便知。 那么,如果我们打破这个限制呢?不再规定每个字母必须向后移动相同的位
2026-03-12
  目录
hexo