跳到主要内容

列移位密码原理:用关键词把明文打乱再读出

讲清楚列移位密码怎么按关键词把明文填进网格,再按列的字母顺序读出密文。换位不换字母,密钥是一个英文单词,附真实加密例子,适合密码学入门和 CTF 解题。

发布于 作者 李雷
#列移位密码 #列换位 #置换密码 #密码学 #CTF

列移位密码原理:用关键词把明文打乱再读出

列移位密码是经典密码学里最容易上手的一类。它的核心很朴素:不替换任何字母,只是把字母搬到别的位置。换句话说,密文里的每个字符都来自明文,出现的次数也一模一样,变的只是它们的先后顺序。第一次接触换位密码的人常会困惑,密文看起来像乱码,可逐个数过去,字母频率和明文完全相同。这正是置换密码和替换类密码最大的分野。

换位和替换的区别

凯撒、维吉尼亚那一类是替换密码,把 A 换成 D,把 B 换成 E,字母本身被改写。列移位走的是另一条路,字母保持不变,被打乱的是位置。你可以这样记:替换改写字符,换位重排字符。也因为如此,列移位密文里若统计每个字母出现多少次,得到的分布和原文一字不差,频率分析对单纯的换位反而不太好使,得换一套思路去破。

关键词是怎么定列序的

列移位的密钥就是一个关键词,通常是一个英文单词。它干两件事:一是决定网格有几列,关键词有几个字母就有几列;二是决定每一列被读出的先后。

具体做法是给关键词的每个字母按字典序排个名次,这个名次就是读列的顺序。拿关键词 ZEBRAS 举例,六个字母按字母表排序是 A、B、E、R、S、Z,于是 A 所在的那列最先读,接着是 B 那列,然后 E、R、S,Z 那列最后读。关键词出现重复字母时,按从左到右破除并列,靠前的列先读。关键词本身永远不会写进消息,它只负责定列序。

一个真实的加密例子

把原理跑一遍最清楚。取明文 WEAREDISCOVEREDFLEEATONCE,关键词 ZEBRAS,六列。先按行填进网格:

关键词:  Z  E  B  R  A  S
读列序:  6  3  2  4  1  5
        W  E  A  R  E  D
        I  S  C  O  V  E
        R  E  D  F  L  E
        E  A  T  O  N  C
        E

现在按字典序读列。先读 A 那列,从上到下是 E V L N E;再读 B 那列 A C D T;再读 E 那列 E S E A;再读 R 那列 R O F O;再读 S 那列 D E E C;最后读 Z 那列 W I R E E。依次拼起来,密文就是:

EVLNE ACDT ESEA ROFO DEEC WIREE

去掉空格连写成 EVLNEACDTESEAROFODEECWIREE。解密时反过来,先用密文长度除以关键词长度算出几整行,判断哪几列在短末行里多一格,再把密文切成等长片段放回各列,逐行读回,就还原成 WEAREDISCOVEREDFLEEATONCE。

我自己第一次手算这道题时,卡在了那个短末行上。明文 25 个字母填六列,最后只剩一个 E 孤零零落在第一列,导致每列高度不一样。读列时如果没有意识到哪几列多出一格,切片就会错位,还原出来全是乱的。后来才明白,补位方式必须和加密时保持一致。不规则补位保留短末行,往返完全可逆且不掺填充字符;规则补位会用 X 把短行补满成完整矩形,这是多数教科书和 CTF 判题默认的形式。比对答案前,先确认两边用的是同一种补位。

在 CTF 和教学里怎么用

夺旗赛里很常见这样一题:给你一段乱序的大写字母,提示密钥是某个英文单词。思路就是逐个试关键词长度,把密文切片重排,看哪个长度读得通顺。你可以在 列移位密码加密解密器 里把密文粘进去,切到解密模式,挨个试。网格视图会清楚显示各列怎样对齐,手工重排列序时帮助很大。当某个猜测的关键词让输出突然读得通,密钥和 flag 就到手了。

课堂上它也是讲置换密码的好例子。载入 ZEBRAS 示例,演示网格逐行填入,再指着列号解释字典序为什么决定读列顺序,学生一眼就能看懂换位和替换的差别。

它安全吗,以及和别的密码的关系

要说清楚:列移位不是现代意义上的安全加密。它一个世纪前是战地密码,如今对计算机不堪一击。单次列移位可以靠列重排或试探短关键词长度破解,连双重列移位也已被现代密码分析攻破。请把它当学习、解谜和 CTF 工具,真正在意的秘密请用经过验证的现代密码,例如通过成熟库调用 AES。

它和 栅栏密码 同属置换密码,都只重排字符,区别在几何结构:栅栏沿之字形写在几条横栏上,唯一密钥是栏数;列移位用矩形网格加关键词,关键词可以很长,密钥空间大得多,还常做两遍变成双重列移位。把它和替换类密码串起来,比如先过一遍替换再列移位,会得到更耐分析的两段式密码,这也是经典密码学里很有意思的玩法。


Made by Toolora · Updated 2026-06-13