# -*- coding: utf-8 -*-'''
helloworldgoodmorningxxxx 5
h l r xe r d o n xl o g m i xl w o d n xo o g
hlrnerdonilogmiqlwodnxoog7
5 1
3 3
1 5
7helloworldgoodmorningxxxx 4
h o o i xe w r o d n n xl o l g m r g xl d o x
hooixewrodnnxlolgmrgxldox5
3 1
1 3
5
'''def enc(plain, num):matrix = [([0] * len(plain)) for i in range(num)]# 獲取i的取值序列i_s = []for a in range(num):i_s.append(a)for a in range(num - 2, 0, -1):i_s.append(a)i_s_len = len(i_s)# 按規(guī)則寫入i = 0for c in plain:matrix[i_s[i % i_s_len]][i] = ci += 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 encrypteddef dec(encrypted, num):matrix = [([0] * len(encrypted)) for i in range(num)]cur = 0for i in range(num): # 按行來填# 生成每行空格個數(shù)的取值序列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]# 按規(guī)則填入pair_i = 0j = iwhile True:if cur < len(encrypted):matrix[i][j] = encrypted[cur]cur += 1j += 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):i_s.append(a)for a in range(num - 2, 0, -1):i_s.append(a)i_s_len = len(i_s)# 按規(guī)則取出decrypted = ''for j in range(len(encrypted)):decrypted += matrix[i_s[j % i_s_len]][j]return decryptedencrypted = 'ccehgyaefnpeoobe{lcirg}epriec_ora_g'
num = 5
for i in range(2,len(encrypted)):print('分為'+str(i)+'欄時,解密結(jié)果為:'+dec(encrypted, i) )
'''
hooixewrodnnxlolgmrgxldox
helloworldgoodmorningxxxx
cyberpeace{railfence_cipher_gogogo}
'''