柵欄密碼 W型柵欄密碼 加解密(python實現)

2022-08-26 08:21:08 字數 2569 閱讀 5453

柵欄密碼定義如下:

柵欄密碼是將明文分成多個組,取每組第乙個字元連成一段,每組第二個字元連成一段……最後將各段連線起來得到密文。

同時也可看成是按一定的步長取幾組字元,再將這幾組字元連起來得到密文。解密同理。

這裡的步長就是金鑰(欄數)。

傳統柵欄密碼的金鑰是密文長度的因數。

如密文長度為n,加密金鑰為x,則有n%x==0。且解密金鑰即為n/x。

**:

'''

遍歷所有可能的欄數,並得到加/解密結果

'''s = 'kysd3js2e'

factors = [fac for fac in range(2, len(s)) if len(s)%fac == 0] #取得密文長度的所有因數

for fac in factors:

flag = ''

for i in range(fac): #按一定的步長取幾組字元,並連線起來,這裡組數就等於步長數

flag += s[i::fac]

print(str(fac)+'欄:'+flag)

w型柵欄密碼是柵欄密碼的變種,

將明文按w型排列,然後將每一行的字母依次連起來組成密文,行數就是金鑰。

解密則同樣畫出這個w型圖案,將每一列的字母依次連線起來組成明文。

w型柵欄密碼的金鑰不只是密文長度的因數,任何小於密文長度大於1的整數都有可能。

**:

'''

若知道欄數,則使用decode解密,若不知道,則使用crack_cipher遍歷所有可能性

'''def generate_w(string, n):

'''將字元排列成w型'''

array = [['.']*len(string) for i in range(n)] #生成初始矩陣

row = 0

upflag = false

for col in range(len(string)): #在矩陣上按w型畫出string

array[row][col] = string[col]

if row == n-1:

upflag = true

if row == 0:

upflag = false

if upflag:

row -= 1

else:

row += 1

return array

def encode(string, n):

'''加密'''

array = generate_w(string, n)

msg =

for row in range(n): #將每行的字元連起來

for col in range(len(string)):

if array[row][col] != '.':

return array, msg

def decode(string, n):

'''解密'''

array = generate_w(string, n)

sub = 0

for row in range(n): #將w型字元按行的順序依次替換為string

for col in range(len(string)):

if array[row][col] != '.':

array[row][col] = string[sub]

sub += 1

msg =

for col in range(len(string)): #以列的順序依次連線各字元

for row in range(n):

if array[row][col] != '.':

return array, msg

def crack_cipher(string):

'''破解密碼'''

for n in range(2,len(string)): #遍歷所有可能的欄數

print(str(n)+'欄:'+''.join(decode(string, n)[1]))

if __name__ == "__main__":

string = "ccehgyaefnpeoobeepriec_ora_g"

n = 5 #欄數

#若不知道欄數,則遍歷所有可能

# crack_cipher(string)

#若知道欄數

W型柵欄密碼

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

密碼學 柵欄密碼

使用的時候通過設定解密的偏移量不一樣的話,會得出不同的解碼內容 一直設定不同的偏移位數 直到找到帶有cyberpeace 開頭的解碼內容 偏移量也就是分組的數字長度 一般就是flag了 有時候它也會全部的解碼都沒有flag的標誌,這時候一定仔細看題目給出的條件 還有的情況就是在題目裡面它會提示給你數...

柵欄密碼加密與解密以及特徵

原理描述 所謂柵欄密碼,就是把要加密的明文分成n個一組,然後把每組的第1個字連起來,形成一段無規律的話。不過柵欄密碼本身有乙個潛規則,就是組成柵欄的字母一般不會太多。一般不超過30個,也就是 一 兩句話 加密特徵 總體來說字母內容不變,僅是字母順序被 打亂 加密的時候要選擇組數,所以解密的話只能逆推...