服务热线
15527777548/18696195380
发布时间:2020-11-01
简要描述:
前言前几日刷题遇到一道密码学的四方解密题:题目如下:四方门主东方青木看着四面八方涌过来的极客,非常震惊,转头便进入了祖祠中的地下室,发现这丫传自唐朝的密室还设计了英文密码...
import collections import re matrix = 'ABCDEFGHIJKLMNOPRSTUVWXYZ' pla = 'abcdefghijklmnoprstuvwxyz' key1 = '[EXAMPLE]' key2 = '[KEYWORD]' key1 = ''.join(collections.OrderedDict.fromkeys(key1)) key2 = ''.join(collections.OrderedDict.fromkeys(key2)) matrix1 = re.sub('[\[\]]','',key1) + re.sub(key1,'',matrix) matrix2 = re.sub('[\[\]]','',key2) + re.sub(key2,'',matrix) matrix_list1 = [] matrix_list2 = [] pla_list = [] for i in range(0,len(matrix1),5): matrix_list1.append(list(matrix1[i:i+5])) #print matrix_list1 for i in range(0,len(matrix2),5): matrix_list2.append(list(matrix2[i:i+5])) #print matrix_list2 for i in range(0,len(pla),5): pla_list.append(list(pla[i:i+5])) #print pla_list #查询明文字母位置 def find_index(x): for i in range(len(pla_list)): for j in range(len(pla_list[i])): if pla_list[i][j] == x: return i,j def gen_cip(letter): #两个子母中第一个字母位置 first = find_index(letter[0]) #两个子母中第二个字母位置 second = find_index(letter[1]) cip = '' cip += matrix_list1[first[0]][second[1]] cip += matrix_list2[second[0]][first[1]] return cip def encrypt(pla): #pla = 'whereismysecretkey' cip = '' for i in range(0,len(pla),2): cip += gen_cip(pla[i:i+2]) return cip def main(): pla = 'hello world' pla = pla.replace(' ','') print (encrypt(pla)) if __name__ == '__main__': main()结果:
import collections import re matrix = 'ABCDEFGHIJKLMNOPRSTUVWXYZ' pla = 'abcdefghijklmnoprstuvwxyz' key1 = '[SECURITY]' key2 = '[INFORMATION]' key1 = ''.join(collections.OrderedDict.fromkeys(key1)) key2 = ''.join(collections.OrderedDict.fromkeys(key2)) matrix1 = re.sub('[\[\]]','',key1) + re.sub(key1,'',matrix) matrix2 = re.sub('[\[\]]','',key2) + re.sub(key2,'',matrix) matrix_list1 = [] matrix_list2 = [] pla_list = [] for i in range(0,len(matrix1),5): matrix_list1.append(list(matrix1[i:i+5])) #print matrix_list1 for i in range(0,len(matrix2),5): matrix_list2.append(list(matrix2[i:i+5])) #print matrix_list2 for i in range(0,len(pla),5): pla_list.append(list(pla[i:i+5])) #print pla_list #查询两个密文字母位置 def find_index1(x): for i in range(len(matrix_list1)): for j in range(len(matrix_list1[i])): if matrix_list1[i][j] == x: return i,j def find_index2(y): for k in range(len(matrix_list2)): for l in range(len(matrix_list2[k])): if matrix_list2[k][l] == y: return k,l def gen_pla(letter): #两个子母中第一个字母位置 first = find_index1(letter[0]) #两个子母中第二个字母位置 second = find_index2(letter[1]) pla = '' pla += pla_list[first[0]][second[1]] pla += pla_list[second[0]][first[1]] return pla def main(): cip = 'ZHNJINHOOPCFCUKTLJ' pla = '' for i in range(0,len(cip),2): pla += gen_pla(cip[i:i+2]) print (pla) if __name__ == '__main__': main()
下一篇:windows提权基础(一)
如果您有任何问题,请跟我们联系!
联系我们