希尔密码作为古典密码的一种,具有其特性,因为它的加密是基于矩阵来进行加密的。具体的加密流程:传送门
当然下面的代码也是起源于实验吧的一道密码学题目:传送门
附上解密源代码(环境python2.7,numpy库需要安装):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#-*-coding:utf-8-*-
from numpy import *
key=mat([[1,2],[0,1]])
key1=key.I.T
#密钥经过一次逆运算再做一次转置
finalans=”
#print key1
str=‘dloguszijluswogaqy’
#密文
str2=[0 for i in range(len(str))]
for i in range(len(str)):
str2[i]=ord(str[i])–ord(‘a’)+1
#将字符串转换为hill密码中的数字
num=len(str2)%4
for i in range(4–num):
str2.append(0)
#print str2
#给上面得到数字进行补位,保证可以四个为一组,方便后面的计算
count=0
for i in range(len(str2)/4):
crypto1=mat([[str2[count],str2[count+1]],[str2[count+2],str2[count+3]]])
#以4个为一组,分别取出每一组密文
ans=(crypto1*key1)%26
#计算明文
ans2=array(ans)
#这里的array是将ans转化为矩阵的标准形式,从而可以去出每一个数字
count+=4
for m in range(2):
for n in range(2):
finalans+=chr(int(ans2[m][n])+ord(‘a’)–1)
#将明文转化为字符串
print finalans
|
做过CTF的都应该知道,在密码学部分栅栏密码是一种常见的考察形式。在每次做这种题目时,我都会根据答案格式来判断栏数,有时因为答案格式的不确定,我们需要把所有的栏数都考虑进去,这时候就需要一个脚本来实现之。 附上栅栏密码密码的python脚本(环境python2…
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
请登录后发表评论
注册