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

Skip to content

# 置换密码 - 等待完善

约 1022 字大约 3 分钟

2025-10-29

置换密码的核心思想不是“把字母换成别的字母”（替换），而是重新排列明文字符的位置。也就是说：

- 明文字母的集合不变，顺序发生了改变；
- 由于字母频率不变，置换密码依然会暴露统计特征，但单词的结构与位置模式被打散。

与“替换密码”相比，置换密码更像是“洗牌”：把原本顺序排列的牌重新打乱。单独使用时并不安全，但与替换联合使用（乘积密码）能显著增强安全性。

## 一、栅栏密码（Rail Fence Cipher）

工作原理： 将明文按“Z字形”写入若干行（称为“栅栏/轨道”），再按行依次读出即得到密文。轨道数即为密钥。

示意（以 3 轨为例）：

    轨1: 0       4       8      ...
    轨2: 1    3  5    7  9      ...
    轨3:   2       6              ...

示例： 明文：`HELLOWORLD` 轨道数：`3`

- 轨1（索引 0,4,8）：`H O L`
- 轨2（索引 1,3,5,7,9）：`E L W R D`
- 轨3（索引 2,6）：`L O`

密文为各轨串联：`HOL` + `ELWRD` + `LO` → `HOLELWRDLO`

数学表示： 设明文 P=p 0p 1…p n−1 P = p_0 p_1 \dots p_{n-1}P=p0​p1​…pn−1​，根据密钥生成一个位置序列 s 0,s 1,…,s n−1 s_0, s_1, \dots, s_{n-1}s0​,s1​,…,sn−1​（即置换次序），则：

Cj=p sj,j=0,1,…,n−1 C_j = p_{s_j}, \quad j = 0,1,\dots,n-1 Cj​=psj​​,j=0,1,…,n−1

解密使用逆序列 t=s−1 t = s^{-1}t=s−1：

pi=C ti,i=0,1,…,n−1 p_i = C_{t_i}, \quad i = 0,1,\dots,n-1 pi​=Cti​​,i=0,1,…,n−1

特点：

- 实现简单，直观“打乱顺序”
- 频率不变，难以抵抗纯统计分析；但位置模式被破坏，较难直接猜词
- 作为教学与与替换密码的组合（乘积密码）更有价值

## 二、列移位置换（Columnar Transposition）

工作原理： 选择一个关键词，将明文按列填入表格，再按关键词的字母排序对列进行重排，最终按列或按行读出密文。

简例（概念演示）： 明文：`ATTACKATDAWN` 关键词：`ZEBRA`（按字母表排序为 `A B E R Z`）

1. 将明文逐行填入 5 列表格；
2. 按关键词排序（A→B→E→R→Z）重排列；
3. 按重排后的列依次读出密文。

（实际实现时需要处理明文长度不足一整行的填充策略，如使用 `X` 或留空。）

数学表示（一般置换模型）： 关键词决定一个列置换 π\piπ，其作用是重新排列列索引。若把明文按列读取为序列 P PP，加密可抽象为：

C=Permute⁡π(P),P=Permute⁡π−1(C)C = \operatorname{Permute}_{\pi}(P), \quad P = \operatorname{Permute}_{\pi^{-1}}(C) C=Permuteπ​(P),P=Permuteπ−1​(C)

特点：

- 比栅栏更灵活，关键词让置换更“难猜”
- 仍保留频率分布，易受已知明文/选择明文的结构分析攻击
- 常与替换结合形成更强的乘积密码（如 ADFGX/ADFGVX 密码）

## 三、联合与加固：置换 × 替换

将“替换”与“置换”组合（先替换后置换，或多轮交替）能显著增强安全性：

- 替换打乱统计特征（字母频率分布变平）
- 置换打乱位置结构（模式与相邻关系被破坏）

这种思路在现代密码设计中仍然常见（“混淆与扩散”理念），尽管算法形式已经大为不同。

## 四、安全性与弱点（直观理解）

- 单独的置换密码不改变字母频率，抵抗统计攻击能力有限
- 容易受到已知明文/选择明文攻击（通过结构猜测置换）
- 多轮、复杂置换能提高攻击成本，但不建议单独用于实际安全场景

## 五、小练习（可选）

试着把你自己的名字用 3 轨栅栏加密；然后写出解密过程（先确定轨道索引，再按逆序重建原文）。

## 附件：

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