W型柵欄密碼

2021-09-27 00:03:44 字數 3017 閱讀 6456

# 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...