实现栅栏密码的编码和解码。
栅栏密码是一种换位密码,名字来自它的编码方式。古希腊人就已经使用过它。
在栅栏密码中,消息沿着想象中栅栏的一条条“栏”向下写,到达底部后再向上移动(就像之字形)。最后,再按行读出消息。
例如,使用 3 条“栏”加密消息“WE ARE DISCOVERED FLEE AT ONCE”,加密者会写出:
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 . .
然后读出:
WECRLTEERDSOEEFEAOCAIVDEN
要解密一条消息,先画出之字形,再沿着各行填入密文。
? . . . ? . . . ? . . . ? . . . ? . . . ? . . . ?
. ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? .
. . ? . . . ? . . . ? . . . ? . . . ? . . . ? . .
第一行有 7 个空位,可以填入“WECRLTE”。
W . . . E . . . C . . . R . . . L . . . T . . . E
. ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? .
. . ? . . . ? . . . ? . . . ? . . . ? . . . ? . .
接下来第二行填入“ERDSOEEFEAOC”。
W . . . E . . . C . . . R . . . L . . . T . . . E
. E . R . D . S . O . E . E . F . E . A . O . C .
. . ? . . . ? . . . ? . . . ? . . . ? . . . ? . .
把“AIVDEN”留给最后一行。
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 . .
现在沿着之字形读下去,就能读出原始消息。