import{_ as t,c as p,a,b as m,r as e,o as l}from"./app-BwvsBlHw.js";const i={};function r(c,s){const n=e("Mermaid");return l(),p("div",null,[s[0]||(s[0]=a('

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

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

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

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

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

一、凯撒密码(Caesar Cipher)

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

数学表示: 设字母 A-Z 对应数字 0-25,则:

加密公式:

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

解密公式:

D(x)=(xk)mod26D(x) = (x - k) \\mod 26

其中 xx 是明文字母编号,kk 是密钥(0 ≤ k ≤ 25)。

特点

二、单表替换密码(Simple Substitution Cipher)

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

',17)),m(n,{code:"eJxLL0osyFDwCeJSAALH6Gcz+p5Na3+6dvqz9b2xCrq6dgpO1c9m73/Wu+jFwhW1YEVOYGHn6Kfr2xBKuQBheCBX"}),s[1]||(s[1]=a(`

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

加密公式:

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

解密公式:

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

其中 f1f^{-1}ff 的逆函数。

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

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

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

示例: 假设替换表为:

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
`,11)),m(n,{code:"eJxLy8kvT85ILCpR8AniUgACx+hnM/qeTWu3UvBw9fHxj1XQ1bVTcIp+Nnv/s95FT7sWPF3fFgtW6ASWcY4GCoCVe4YEB7tDpJzBUi7RLxvaIPpeLF8M1+cClnRFs4YLAB+ANJQ="}),s[2]||(s[2]=a('

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

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

攻击方法

特点

三、维吉尼亚密码(Vigenère Cipher)

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

',8)),m(n,{code:"eJxLL0osyFDwCeJSAALH6Gcz+p5Na49V0NW1U3Cqftq6+eWUdS/W9z7dt+p53/pnnSufbpxaC1bqBFbiDNXwZEcfXO2zns4ne3uf7255OqEjFqzWGazWpfrpklkvFq54Nnv/s95FEFNcwDKu0U/Xt4Gs5QIA25lDeQ=="}),s[3]||(s[3]=a('

数学表示: 设字母 A-Z 对应数字 0-25。 明文 P=p0p1...pn1P = p_0 p_1 ... p_{n-1} 关键词 K=k0k1...km1K = k_0 k_1 ... k_{m-1} (长度为 mm)

加密公式:

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

解密公式:

D(ci)=(ciki(modm))mod26D(c_i) = (c_i - k_{i \\pmod m}) \\mod 26

其中 pip_i 是明文第 ii 个字母的数字表示,ki(modm)k_{i \\pmod m} 是关键词循环后对应第 ii 个字母的数字表示,cic_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. 加密运算: 对每对明文数字 pip_i 和关键词数字 ki(modm)k_{i \\pmod m} 执行 (pi+ki(modm))mod26(p_i + k_{i \\pmod m}) \\mod 26 运算。 例如:

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

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

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

特点

附件:

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

',15))])}const h=t(i,[["render",r]]),g=JSON.parse('{"path":"/theory/cryptography/substitution-ciphers/","title":"替换密码","lang":"zh-CN","frontmatter":{"title":"替换密码","createTime":"2025/10/27 10:47:42","permalink":"/theory/cryptography/substitution-ciphers/"},"readingTime":{"minutes":5.49,"words":1648},"git":{"createdTime":1761564580000,"updatedTime":1761564580000,"contributors":[{"name":"祀梦","username":"","email":"3501646051@qq.com","commits":1,"avatar":"https://gravatar.com/avatar/6406a81eeddc359cf3d3ce018797689fc6d014ff06215c27d0210b42e8f5a8ab?d=retro"}]},"filePathRelative":"notes/theory/cryptography/classical-encryption/substitution-ciphers.md","headers":[]}');export{h as comp,g as data};