# 替换密码 | 仲夏夜之梦
爱与回忆的小世界，记录生活中的每一份温暖与感动

Skip to content

# 替换密码

约 1648 字大约 5 分钟

2025-10-27

我们一起来系统梳理古典加密算法（Classical Ciphers）。这些算法虽然在现代已不再安全，但它们是密码学发展的基石，蕴含了替换、置换、密钥等核心思想，非常适合理解密码学的基本原理。

替换密码的核心思想是“一对一”或“多对一”的字符映射：把明文中的每一个字母（或符号）按照事先约定好的规则，替换成另一个字母（或符号）。

这种映射可以是固定不变的（如凯撒密码的“统一移位”），也可以是依赖密钥动态变化的（如维吉尼亚密码的“周期移位”）。

由于密文保留了原始字母的出现频率，只是“换了一张皮”，所以替换密码在本质上没有改变字母的统计特性，这也为频率分析攻击留下了突破口。

替换操作可以手工完成，也可以通过查表、转盘、甚至机械电路实现，是后续更复杂多表替换与乘积密码的雏形。

## 一、凯撒密码（Caesar Cipher）

工作原理： 凯撒密码是一种循环移位密码，将字母表视为一个环形结构。加密时每个字母向后移动固定位置 k kk，解密时向前移动相同位置。

数学表示： 设字母 A-Z 对应数字 0-25，则：

加密公式：

E(x)=(x+k)mod 26 E(x) = (x + k) \mod 26 E(x)=(x+k)mod26

解密公式：

D(x)=(x−k)mod 26 D(x) = (x - k) \mod 26 D(x)=(x−k)mod26

其中 x xx 是明文字母编号，k kk 是密钥（0 ≤ k ≤ 25）。

特点：

- 实现简单，易于理解
- 密钥空间仅 26 2626 种可能，安全性极低
- 易受频率分析攻击
- 主要具有教学价值

## 二、单表替换密码（Simple Substitution Cipher）

工作原理： 单表替换密码是凯撒密码的泛化形式，它使用一个随机的字母替换表，而不是固定的移位。每个明文字母都被唯一地映射到一个密文字母，形成一对一的替换关系。

数学表示： 设字母表 Σ={A,B,C,...,Z}\Sigma = \{A,B,C,...,Z\}Σ={A,B,C,...,Z}，替换函数 f:Σ→Σ f: \Sigma \rightarrow \Sigmaf:Σ→Σ 是一个双射（一一对应），则：

加密公式：

E(x)=f(x)E(x) = f(x) E(x)=f(x)

解密公式：

D(y)=f−1(y)D(y) = f^{-1}(y) D(y)=f−1(y)

其中 f−1 f^{-1}f−1 是 f ff 的逆函数。

密钥空间： 单表替换密码的密钥空间是所有可能的字母排列，大小为：

∣K∣=26!≈4.03×1026|K| = 26! \approx 4.03 \times 10^{26} ∣K∣=26!≈4.03×1026

这个巨大的密钥空间使得暴力破解在计算上不可行。

示例： 假设替换表为：

    A→Q, B→W, C→E, D→R, E→T, F→Y, G→U, H→I, I→O, J→P,
    K→A, L→S, M→D, N→F, O→G, P→H, Q→J, R→K, S→L, T→Z,
    U→X, V→C, W→V, X→B, Y→N, Z→M

安全性分析： 虽然单表替换密码的密钥空间巨大，但它仍然易受频率分析攻击。因为：

1. 字母频率保留：高频字母（如E、T、A）在密文中仍然是高频
2. 单词模式保留：常见单词模式（如"THE"、"ING"）在密文中保持相同模式
3. 双字母频率：常见字母对（如"TH"、"ER"）的频率特征仍然存在

攻击方法：

- 单字母频率分析
- 双字母频率分析
- 单词长度和模式分析
- 已知明文攻击

特点：

- 密钥空间巨大（26!26!26!），理论上难以暴力破解
- 仍然易受统计攻击
- 是密码学历史上重要的里程碑
- 为现代密码学提供了重要启示

## 三、维吉尼亚密码（Vigenère Cipher）

工作原理： 维吉尼亚密码是一种多表替换密码，它使用一个关键词来决定每次替换的凯撒密码移位量。关键词的每个字母对应一个移位量，明文的每个字母根据关键词的循环使用进行替换。

数学表示： 设字母 A-Z 对应数字 0-25。 明文 P=p 0p 1...p n−1 P = p_0 p_1 ... p_{n-1}P=p0​p1​...pn−1​ 关键词 K=k 0k 1...k m−1 K = k_0 k_1 ... k_{m-1}K=k0​k1​...km−1​ (长度为 m mm)

加密公式：

E(pi)=(pi+k i(mod m))mod 26 E(p_i) = (p_i + k_{i \pmod m}) \mod 26 E(pi​)=(pi​+ki(modm)​)mod26

解密公式：

D(ci)=(ci−k i(mod m))mod 26 D(c_i) = (c_i - k_{i \pmod m}) \mod 26 D(ci​)=(ci​−ki(modm)​)mod26

其中 pi p_ipi​ 是明文第 i ii 个字母的数字表示，k i(mod m)k_{i \pmod m}ki(modm)​ 是关键词循环后对应第 i ii 个字母的数字表示，ci c_ici​ 是密文第 i ii 个字母的数字表示。

示例： 明文：`ATTACKATDAWN` 关键词：`LEMON`

1. 关键词循环扩展： 将关键词 `LEMON` 循环扩展至与明文等长：`LEMONLEMONLE`

2. 明文与关键词按位组合（数字表示）： 将明文和扩展后的关键词转换为数字 (A=0, B=1, ..., Z=25)。 明文数字: `0 19 19 0 2 10 0 19 3 0 22 13` 关键词数字: `11 4 12 14 13 11 4 12 14 13 11 4`

3. 加密运算： 对每对明文数字 pi p_ipi​ 和关键词数字 k i(mod m)k_{i \pmod m}ki(modm)​ 执行 (pi+k i(mod m))mod 26(p_i + k_{i \pmod m}) \mod 26(pi​+ki(modm)​)mod26 运算。 例如：

   - 第一个字母：明文 A (0) + 关键词 L (11) = (0+11)mod 26=11→L(0 + 11) \mod 26 = 11 \rightarrow L(0+11)mod26=11→L
   - 第二个字母：明文 T (19) + 关键词 E (4) = (19+4)mod 26=23→X(19 + 4) \mod 26 = 23 \rightarrow X(19+4)mod26=23→X
   - 第三个字母：明文 T (19) + 关键词 M (12) = (19+12)mod 26=5→F(19 + 12) \mod 26 = 5 \rightarrow F(19+12)mod26=5→F ... 最终密文：`LXFOPVEFRNHR`

安全性分析： 维吉尼亚密码比单表替换密码更安全，因为它引入了多表替换，使得密文的字母频率分布趋于平坦，从而抵抗了简单的频率分析攻击。

然而，它并非绝对安全，主要弱点在于关键词的周期性：

1. Kasiski 测试：通过分析密文中重复出现的字母组，可以推断出关键词的长度。
2. 频率分析（针对子密码）：一旦关键词长度确定，密文可以被分成若干个凯撒密码，然后对每个子密码进行频率分析。

特点：

- 多表替换，比单表替换密码更安全
- 引入了关键词的概念，增强了密钥的复杂性
- 易受Kasiski测试和频率分析的组合攻击
- 在历史上曾被认为是“牢不可破的密码”

## 附件：

具体的使用样例代码请参考：https://gitea.simengweb.com/si-meng-spec/cryptography-example-code