# coding:utf8
'''helloworldgoodmorning***x 5
h l r x
e r d o n x
l o g m i x
l w o d n x
o o g
hlrnerdonilogmiqlwodnxoog
75 1
3 31 5
7helloworldgoodmorning***x 4
h o o i x
e w r o d n n x
l o l g m r g x
l d o x
hooixewrodnnxlolgmrgxldox
53 1
1 35
'''def
enc(plain, num)
: matrix =[(
[0]*
len(plain)
)for i in
range
(num)
]# 獲取i的取值序列
i_s =
for a in
range
(num)
:for a in
range
(num -2,
0,-1
):i_s_len =
len(i_s)
# 按規則寫入
i =0for c in plain:
matrix[i_s[i % i_s_len]
][i]
= c i +=
1# 排除空值,從頭到尾取出
encrypted =
''for i in
range
(num)
:for j in
range
(len
(plain)):
if matrix[i]
[j]:
encrypted += matrix[i]
[j]# 臨時輸出
for i in
range
(num)
:for j in
range
(len
(plain)):
print matrix[i]
[j],
' ',
print
return encrypted
defdec
(encrypted, num)
: matrix =[(
[0]*
len(encrypted)
)for i in
range
(num)
] cur =
0for i in
range
(num)
:# 按行來填
# 生成每行空格個數的取值序列
if i ==0:
# 第1行和最後一行,只需要乙個取值就好了
pair =
[(num-
(i+1))
*2-1
]elif i == num-1:
pair =
[i*2-1
]else
: pair =
[(num-
(i+1))
*2-1
, i*2-
1]# 按規則填入
pair_i =
0 j = i
while
true
:if cur <
len(encrypted)
: matrix[i]
[j]= encrypted[cur]
cur +=
1 j += pair[pair_i %
len(pair)]+
1# 這裡要加1,直接加間隔是不夠的
pair_i +=
1if j >=
len(encrypted)
:break
# 臨時輸出
for i in
range
(num)
:for j in
range
(len
(encrypted)):
print matrix[i]
[j],
' ',
print
# 獲取i的取值序列
i_s =
for a in
range
(num)
:for a in
range
(num -2,
0,-1
):i_s_len =
len(i_s)
# 按規則取出
decrypted =
''for j in
range
(len
(encrypted)):
decrypted += matrix[i_s[j % i_s_len]
][j]
return decrypted
encrypted = enc(
'helloworldgoodmorning***x',11
)print encrypted
decrypted = dec(encrypted,11)
print decrypted
encrypted =
'ccehgyaefnpeoobeepriec_ora_g'
num =
5print dec(encrypted, num)
'''hooixewrodnnxlolgmrgxldox
helloworldgoodmorning***x
cyberpeace
'''
柵欄密碼 W型柵欄密碼 加解密(python實現)
柵欄密碼定義如下 柵欄密碼是將明文分成多個組,取每組第乙個字元連成一段,每組第二個字元連成一段 最後將各段連線起來得到密文。同時也可看成是按一定的步長取幾組字元,再將這幾組字元連起來得到密文。解密同理。這裡的步長就是金鑰 欄數 傳統柵欄密碼的金鑰是密文長度的因數。如密文長度為n,加密金鑰為x,則有n...
密碼學 柵欄密碼
使用的時候通過設定解密的偏移量不一樣的話,會得出不同的解碼內容 一直設定不同的偏移位數 直到找到帶有cyberpeace 開頭的解碼內容 偏移量也就是分組的數字長度 一般就是flag了 有時候它也會全部的解碼都沒有flag的標誌,這時候一定仔細看題目給出的條件 還有的情況就是在題目裡面它會提示給你數...
暴力破解柵欄密碼(Python)
蘆花叢中一扁舟,俊傑俄從此地游。義士若能知此理,反躬難逃可無憂。水滸傳 usr bin env python3 e input 清輸入要解密的字串 n elen len e 計算字串長度 field for i in range 2 elen 做乙個迴圈,從2開始到數字elen 字串長度 if el...