题目
小山丘的秘密
思路
- 评论提示
希尔 (Hill) 密码
,学习一下
希尔(bill)
密码是将密文通过 a-z > 0-25 的格式转换成数字,然后根据加密密钥的一个线性矩阵将对应的密文做一个矩阵乘法和模运算,具体怎么算稍稍没太看懂,影响不大
工具
在某个大佬博客里看见了一段代码,稍稍研究一下,自己使使
import numpy as np
#定义字母表,这里A=1,z=0
table=['z','a','b','c','d','e','f','g','h',
'i','j','k','l','m','n','o','p','q',
'r','s','t','u','v','w','x','y']
#定义密钥
key_inv=np.matrix(np.array([[1,2,3],[0,1,4],[5,6,0]])).I%26
#密文根据字母表翻译成矩阵
result=key_inv*np.array([[16,20,17],
[12,7,8],
[7,2,13]])%26
str=''
resulttable=[]
for i in range(result.shape[0]):
for j in range(result.shape[1]):
resulttable.append(round(result.T[i,j]))
for i in range(9):
str+=table[resulttable[i]]
print("bugku{"+str+'}')
过程
- 棋盘格应该对应加密秘钥,翻译成加密矩阵
- 根据密码表翻译bugku{PLGTGBQHM}
PLGTGBQHM >> 16 12 7 20 7 2 17 8 13
{[16,12,7]
[20,7,2]
[17,8,13}
- 然后矩阵乘加模运算
bugku{whatahill}
总结
- 希尔密码确定字母表序列
- 确定秘钥
- 放进去算