1. 先列出 DES 里真正独立的“置换类”操作
(1)明文侧(数据通路)
- 初始置换 IP —— 64→64 位置换
- 16 轮 Feistel 中的 P 盒 —— 每轮 1 次,共 16 次(32→32 位置换)
- 末置换 FP = IP⁻¹ —— 64→64 位置换
→ 明文侧:1 + 16 + 1 = 18 次置换
(2)密钥侧(子密钥生成)
- PC‑1、PC‑2、循环移位,这些一般不算在“18/19 次置换”里,只算密钥调度。
所以:
标准说法:DES 有 18 次置换(IP + 16×P + FP)。
2. 为什么有的教材写 19 次?
原因只有一个:统计口径不一样,常见两种:
情况 A:把“最后一轮不交换”也算成一次置换/换位
很多图画 Feistel 轮时:
- 第 1~15 轮:L、R 交换
- 第 16 轮:不交换,直接拼接 L16R16
有的教材把这 16 轮里的15 次交换 + 1 次“不交换”也记作一次特殊置换,再加上 IP、FP、16 个 P 盒:
- IP:1
- 16×P:16
- FP:1
- 最后一轮“换位/不换位”:1 → 合计 19
这是教学上为了讲清楚 Feistel 结构硬凑的数字,不是标准定义。
情况 B:把密钥里 PC‑1 或 PC‑2 也算进去
- IP
- 16×P
- FP
- PC‑1(或 PC‑2) → 也会凑出 19。
但正规密码学标准和工程实现都不算密钥侧的 PC 作为那 18 次之一。
3. 一句话总结
- 标准 DES:18 次置换 = IP + 16 轮 P 盒 + FP
- 教材写 19 次:多半是把最后一轮的换位/不换位也算成一次置换,属于教学统计口径,不是标准事实。
注意:本文归作者所有,未经作者允许,不得转载