题目描述:被小鱼一连将了两军,你心里更加不服气了。两个人一起继续往前走, 一路上杂耍卖艺的很多,但是你俩毫无兴趣,直直的就冲着下一个谜题的地方去了。 到了一看,这个谜面看起来就已经有点像答案了样子了,旁边还画着一张画,是一副农家小院的 图画,上面画着一个农妇在栅栏里面喂5只小鸡,你嘿嘿一笑对着小鱼说这次可是我先找到答案了
ccehgyaefnpeoobe{lcirg}epriec_ora_g
# -*- 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)# 按规则写入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): # 按行来填# 生成每行空格个数的取值序列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 = 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)# 按规则取出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)+'栏时,解密结果为:'+dec(encrypted, i) )
'''
hooixewrodnnxlolgmrgxldox
helloworldgoodmorningxxxx
cyberpeace{railfence_cipher_gogogo}
'''