跳到主要内容

栅栏密码(Rail Fence)入门:之字形换位的加密、解密与暴力破解

栅栏密码把字母按锯齿形写在几行栅栏上再逐行读出,密钥就是栏数。本文讲清它和代换密码的区别,带一个三栏加密的真实例子,并示范怎么在不知道栏数时破解 CTF 谜题。

发布于 作者 李雷
#栅栏密码 #置换密码 #CTF #密码学入门 #编码解码

栅栏密码:之字形换位是怎么把一句话拆乱再拼回来的

第一次见到栅栏密码,很多人会以为它和凯撒一样在替换字母。其实它一个字母都不换,只挪位置。明文沿对角线先往下写、到底再折回往上,像锯齿一样铺在几条横线(栅栏)上,然后一行一行读出来,顺序就乱了。密钥简单到只有一个数:栏数。正因为如此,它在 CTF 入门题、密室谜题和课堂演示里出现得非常频繁。

之字形是怎么排的

假设用 3 栏。把字母从顶栏开始往下放,放到最底栏就折返往上,到顶栏再折下去,如此循环。每个字符都按这条锯齿路径落在某一栏上。排完之后,不再沿对角线读,而是一栏一栏横着读:先读顶栏所有字母,再读中栏,最后读底栏,拼接起来就是密文。

关键点就在这里:加密是"斜着写、横着读",解密是"先把空网格按锯齿形画好、按栏填回字母、再沿锯齿路径读回去"。两者方向相反,所以栅栏密码不是自反的,加密两次不会还原。

一个真实的三栏加密例子

拿教科书上的经典串 WEAREDISCOVEREDFLEEATONCE,用 3 栏:

  • 顶栏落到:W . . . E . . . C . . . R . . . L . . . T . . . E
  • 中栏落到:. E . R . D . S . O . E . E . F . E . A . O . C
  • 底栏落到:. . A . . . I . . . V . . . D . . . E . . . N

逐行读出来:顶栏 WECRLTE,中栏 ERDSOEEFEAOC,底栏 AIVDEN。连起来就是密文 WECRLTEERDSOEEFEAOCAIVDEN。解密时,先数出每栏该有多少字母(顶栏 7 个、中栏 12 个、底栏 6 个),把空锯齿一栏一栏填满,再沿对角线读一遍,原文就回来了。可以直接打开 栅栏密码加解密器,把这串粘进去切到解密、设 3 栏,看它一步步还原。

换位密码和代换密码的区别

这是栅栏最适合用来讲的一课。凯撒密码 这类代换密码把每个字母换成另一个,A 变 D,字母频率随之改变;栅栏这类换位密码保留每个原字母,只改它的位置。有个一眼就能验的办法:数一下密文和明文里各字母出现的次数,换位密码里两者完全一致,因为字母根本没被替换过。这也解释了为什么栅栏会把空格、标点、数字甚至中文一起打乱,它对每个字符一视同仁,每个都在锯齿上占一个槽;而凯撒只动字母表里的字母,空格标点纹丝不动。

不知道栏数时怎么破

栏数就是全部的密钥,而且范围很小,通常 2 到 10 之间。所以根本不用花哨的分析,全试一遍即可。把工具切到暴力破解,它会在 2 栏、3 栏、4 栏一路往上各解一遍,把候选明文并排列出。你扫一眼,挑读得通的那一行。

我自己最近练一道新手 CTF 题时,拿到的是 fanlrieca{lfeg_},花括号摆在那儿明显是个 flag,可没给密钥。我没动手画格子,直接丢进暴力破解,候选列表里第四行赫然是 flag{rail_fence},它对应的栏数 4 就是出题人藏起来的密钥。整个过程不到十秒,比拿草稿纸数对角线快太多。还原旧纸条也是同理:只记得用过栅栏却忘了几栏,让它把各栏数的结果并排摆出,哪一行读出来是人话,旁边的栏数就是你忘掉的钥匙。

别踩这几个坑

第一,加密和解密方向别搞混。点了加密又点一次加密,文字只会被再打乱一遍,不会还原,记得切到解密、栏数保持不变。第二,加密前别擅自删空格标点。栅栏是换位密码,空格也参与排布,你删了对方没删,锯齿就对不上,解出来是错的,两边要用完全一样的字符串。第三,设过偏移就别忘。栏数加一个非零偏移仍是有效密钥,但两半都得对上,分享链接会把栏数和偏移一并带上,别凭记忆填。

想接着玩别的经典密码,可以看看 ROT13 编码器摩尔斯电码翻译器,它们和栅栏一样适合拿来做谜题和教学。

它不是真正的加密

说到底,栅栏密码的全部秘密就是一个不大的栏数,暴力破解一键就能破掉,所以千万别拿它保护密码、文档或私人消息。它的舞台是谜题、CTF 练习和讲台。明白了这一点,你反而能更放心地用它出题、教课、解谜,因为它要的从来不是安全,而是让换位这件事看得见、玩得动。


Made by Toolora · Updated 2026-06-13