栅栏密码
栅栏密码是一种 换位密码 (transposition cipher),通过改变明文字符的位置来加密,而不改变字符本身。 它的名字来源于 “栅栏(rail fence)” 的排列方式——加密时把明文像沿栅栏轨迹写下去,然后按行顺序读取密文。
-
明文按照一定的行数(栅栏数)分布成多行。
-
再按行依次读取字符形成密文。
基本加密过程¶
步骤¶
- 选择栅栏数 N(行数)。
- 写明文
- 明文按字母顺序沿“栅栏轨迹”排列。
- 在 N 行之间“之字形”排列:从上往下写到最后一行,再从下往上写回第一行,如此循环。
- 按行读取密文
- 第一行字符 → 第二行字符 → … → 最后一行字符依次连接。
示例¶
明文: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 . .
按行读取密文:
解密过程¶
解密需要逆向操作:
- 知道栅栏数 N
- 确定每行或每列的字符数量
- 按之字形(传统栅栏)或列顺序(固定分组)重新排列
- 按原顺序读取明文
示例¶
密文:WECRLTEERDSOEEFEAOCAIVDEN
栅栏数:3
- 计算每行字符长度(总长度26):
- 第一行:9
- 第二行:8
- 第三行:9
- 按行填充栅栏轨迹
- 按之字形读取 → 得到原文
WEAREDISCOVEREDFLEEATONCE
W形栅栏¶
W 形栅栏密码是一种 多峰之字形排列的换位密码。
如果传统栅栏密码只是“上下走一次”,W 形栅栏会在 每个周期形成 W 的形状,即上→下→上→下 → 上,形成两个峰。
栅栏数通常大于 2(至少 3 行),每行代表 W 的一个“轨迹”。
视觉示意(栅栏数 = 3,明文 “HELLORAILFENCE”):
这里就像一个 W,中间行的字符在两峰之间。
W 形加密流程¶
- 选择栅栏数 N
- N ≥ 3,N 越大 W 越“高”。
- 写明文
- 从第一行开始向下走到最后一行,然后向上走到第一行,再向下(形成 W 的第二个峰),依次循环。
- 按行读取密文
- 第一行字符 → 第二行字符 → … → 最后一行字符
- 连接所有字符得到密文
示例¶
明文:WEAREDISCOVEREDFLEEATONCE
栅栏数:4(W形)
写 W 形栅栏(行索引 0~3):¶
W . . . R . . . E . . . L . . . T
. E . R . D . S . O . E . E . F .
. . A . . . I . . . V . . . D . .
. . . R . . . C . . . A . . . O .