服务热线
15527777548/18696195380
发布时间:2020-11-01
简要描述:
前言前几日刷题遇到一道密码学的四方解密题:题目如下:四方门主东方青木看着四面八方涌过来的极客,非常震惊,转头便进入了祖祠中的地下室,发现这丫传自唐朝的密室还设计了英文密码...

同样道理,找第二个字母在右下角矩阵的位置:
找右上角矩阵中,和第一个字母同行,第二个字母同列的字母:
找左下角矩阵中,和第一个字母同列,第二个字母同行的字母:
FY这两个字母就是加密过的讯息。循环后hello world的加密结果:FY HG HZ HS JE脚本: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提权基础(一)
如果您有任何问题,请跟我们联系!
联系我们
