簡介
所謂栅欄密碼,就是把要加密的明文分成N個一組,然後把每組的第1個字連起來,形成一段無規律的話。 不過栅欄密碼本身有一個潛規則,就是組成栅欄的字母一般不會太多。(一般不超過30個,也就是一、兩句話)
實作
一般比較常見的是2欄的栅欄密碼。
比如明文:THEREISACIPHER
兩個一組,得到:TH ER EI SA CI PH ER
先取出第一個字母:TEESCPE
再取出第二個字母:HRIAIHR
連在一起得到密文:TEESCPEHRIAIHR
而解密的時候,我們先把密文從中間分開,變為兩行:
T E E S C P E
H R I A I H R
再按上下上下的順序組合起來:
得到明文:THEREISACIPHER
代碼
函數(字元串,間隔)
def enFence(string, space):
s = ""
for i in range(0, space):
for j in range(i, len(string), space):
# 不能越界
if j < len(string):
s += string[j]
print(s)
def deFence(string, space):
s = ""
if len(string) % space == 0:
key = len(string) // space
else:
key = len(string) // space + 1
# 小于間隔繼續
for i in range(0, key):
for j in range(i, len(string), key):
# 不能越界
if j < len(string):
s += string[j]
print(s)
主函數
import Fence
if __name__ == "__main__":
Fence.enFence("123456789", 3)
Fence.deFence("147258369", 3)
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNCM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPn1EeBR1T3VkaNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLykTNzAzMwIjM0ETMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
總結
這個也不是很常見,了解即可。