斯巴达密码棒(Scytale):最古老的换位密码是怎么缠绕木棒的
斯巴达密码棒,也叫天书密码,是已知最古老的换位密码。它把字母绕木棒缠绕后按列重排,密钥就是木棒的直径。带一段真实加密例子和动手教学。
斯巴达密码棒(Scytale):最古老的换位密码是怎么缠绕木棒的
公元前五世纪的斯巴达,一名传令兵带着一条皮条穿过营地,皮条上写满看不懂的字母。收信的将领从腰间解下一根木棒,把皮条沿着木棒一圈圈缠上去,刚才那串乱码忽然沿着木棒的纵向排成了一句完整的命令。这就是天书密码(scytale),通常被认为是已知最古老、为军事通信而生的换位密码。
它的迷人之处在于,整个密码学没有比它更朴素的装置了:一根木棒,一条皮带,密钥是木棒的粗细。下面我把它的原理、一个能逐字对照的加密例子,以及一段我自己的动手感受都讲清楚。
木棒、皮条和直径这一个密钥
天书密码的物理形态很直观。把一条窄皮带斜着缠在木棒上,缠完一圈圈后,沿着木棒的长度方向横着写字。写完把皮带解下来,字母在皮带上就是被打乱的顺序。只有用相同粗细的木棒重新缠回去,字母才会重新对齐成原文。
这里唯一的秘密是木棒的直径,也就是绕木棒一圈能容纳多少个字符。把它抽象成纸面上的网格,直径就等于网格的列数。木棒越粗,列数越多,文字被摊得越开,打乱得越彻底。发信和收信的人必须事先约好同一个直径,差一格,各列的高度就错了,读出来还是乱码。
按列数重排:加密到底做了什么
把过程拆成网格就一目了然。设直径,也就是列数,把明文按行一格一格填进去,填满一行换下一行。加密时不再按行读,而是一列一列从上往下读,先读最左边那一列,再读第二列,直到最后一列。解密就是反着来:按列数把网格重建出来,再逐行读回去。
具体的一步,以直径 4 为例。明文 HELLOWORLD 按行填进 4 列宽的网格:
H E L L
O W O R
L D
现在沿每一列从上往下读:第一列是 H O L,第二列 E W D,第三列 L O,第四列 L R。拼起来得到密文 HOLEWDLOLR。
收信方拿到 HOLEWDLOLR,知道直径是 4,反推回同样的网格,再逐行读,就还原成 HELLOWORLD。注意到一件关键的事:密文和明文用的是完全相同的十个字母,只是顺序变了。这正是换位密码区别于替换密码的地方,后者会把字母换成别的符号,比如 凯撒密码 那种整体移位的玩法。
它和栅栏、列移位是一家人
天书密码属于换位密码这一族,同族里还有几个常被一起讲。栅栏密码 把文字写成先下后上的之字形,跨过固定的栏数再逐栏读;天书密码没有之字形,横平竖直地按行写、按列读。换句话说,天书密码就是列保持自然顺序的最朴素的 列移位密码,而真正的列移位会再用一个关键词去打乱列的先后顺序。理解了天书密码,这一整族的思路就都通了。
如果你想动手把上面的例子跑一遍,可以直接用 天书密码加解密器,设直径试试加密和解密,工具里还有一个实时的密码棒网格,把每个字符怎样缠绕木棒画出来。
我自己上手的那一下
我第一次拿这个工具,是想验证一道 CTF 题给的那串乱码到底是不是天书。题目只提示它缠过木棒,没给直径。我把字符串粘进去,切到解密,把直径从 2 一格一格往上调。前面几个值读出来都还是噪声,调到某一个直径的瞬间,乱码忽然塌成了一行正常的句子,旁边那个直径就是密钥。整个过程没用任何词频表,因为换位密码不改字母数量,密文里每个字母出现几次,答案里就出现几次,读得通的那一行一眼就能认出来。这种"挨个试直径直到文字归位"的手感,比看十页教科书都直接。
要提醒一句最常踩的坑:天书密码不是自反的。横着写和沿列读是两套不同的运算,所以你在直径 5 上加密后,千万别再按一次加密想还原,那只会把文字再打乱一遍。正确做法是直径不动,把模式切到解密。另外空格和标点也都各占一格,加密和解密要用一字不差、完全相同的字符串。
别拿它当真正的加密
把话说白:天书密码在今天没有任何安全性可言。它唯一的秘密是一个不大的直径,通常就是一位数,把可能的值挨个试一遍几秒就破了。它的价值不在保密,而在教学、谜题、CTF 练习,以及让人亲手摸到古典密码的工作方式。想给密室或寻宝设计一条线索,它很合适;想保护密码或私人文件,它一点都不合适。如果你对古典密码的脉络感兴趣,顺着这条线还能去看更晚一些的 波利比奥斯方阵密码,感受希腊人怎样从重排字母走向用坐标编码字母。
两千五百年前,一根木棒就能让一句军令在敌人眼里变成天书。它早已不再安全,但作为密码学的起点,它把"换位"这个最基本的想法讲得干干净净,至今仍是最好的入门第一课。
Made by Toolora · Updated 2026-06-13