今天做了几道CTF加密解密题,在此贴一些CTF中常见的密码解密代码。由于之前总结过一些,详见:CTF加密与解密,因此本篇主要补充一些之前没提到的加密方式。
该密码使用1,2,4,8四个数字,其中0用来表示间隔,其他数字以加法表示,比如:28=10,124=7,18=9,再用 1->26 表示 A->Z转化即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
dict_ = {}
for i
in xrange(1,27):
dict_[i]=chr(i+64)
def decode(str_):
str_new =
""
list_ = str_.split(
"0")
for i
in list_:
number = 0
for j
in i:
number+=int(j)
str_new+=dict_.get(number)
return str_new
if __name__==
"__main__":
str_ =
"8842101220480224404014224202480122"
print decode(str_)
|
参考:https://wiki.x10sec.org/crypto/classical/others/#01248
电脑键盘 QWE 加密法,就是用字母表替换键盘上面的排列顺序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
str1=
"QWERTYUIOPASDFGHJKLZXCVBNM"
str2=
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def qwe_encode(en_str):
str3 =
""
for s
in en_str:
str3=str3+str1[str2.index(s.upper())]
return str3
def qwe_decode(de_str):
str3 =
""
for s
in de_str:
str3=str3+str2[str1.index(s.upper())]
return str3
if __name__==
"__main__":
print qwe_decode(
"OOSNGQCFTWLQIK")
print qwe_encode(
"IILYOAVNEBSAHR")
|
参考:https://www.cnblogs.com/ssooking/p/6559935.html
百度百科
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
from numpy import *
Dic = {chr(i+97):i
for i
in range(26)}
def decode_2(
pwd=
'dloguszijluswogaqy',org=[[1,2],[0,1]]):
''
' 二维矩阵 '
''
key=mat(org)
key1=key.I.T
#密钥经过一次逆运算再做一次转置
finalans=
''
str2=[0
for i
in range(len(
pwd))]
for i
in range(len(
pwd)):
str2[i]=ord(
pwd[i])-ord(
'a')+1
#将字符串转换为hill密码中的数字
num=len(str2)%4
for i
in range(4-num):
str2.append(0)
#给上面得到数字进行补位,保证可以四个为一组,方便后面的计算
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)
#将明文转化为字符串
finalans = finalans.replace(
"`",
"")
return finalans
def decode_3(
pwd=
"wjamdbkdeibr", org=[[1,2,3],[4,5,6],[7,8,10]]):
''
' 三维矩阵 '
''
pwd = list(
pwd)
org_ = matrix(array(org))
org = get_vmatrix(org_)
temp = []
result = []
while True:
if len(
pwd) % 3 != 0:
pwd.append(
pwd[-1])
else:
break
for i
in
pwd:
temp.append(Dic.get(i))
temp = array(temp)
temp = temp.reshape(len(
pwd)/3, 3)
xx = matrix(temp)*org
for j
in range(len(
pwd)/3):
for i
in range(3):
if (int(xx[j, i]) >= 26):
result.append(chr(xx[j, i] % 26 + 97))
else:
result.append(chr(xx[j, i] + 97))
return
"".join(result)
def get_vmatrix(org):
org_adjoin = org.I*linalg.det(org)
org_det = int(str(abs(linalg.det(org))).split(
'.')[0])
for i
in range(1, 26):
if i * org_det % 26 == 1:
break
org_mod = -org_adjoin * i % 26
org_mod = matrix(org_mod)
temp = []
for i
in range(org_mod.shape[0]):
for j
in range(org_mod.shape[1]):
temp.append(int(str(org_mod[i, j]).split(
'.')[0]))
org_final = matrix(temp).reshape(org_mod.shape[0], org_mod.shape[1])
return org_final
if __name__ ==
'__main__':
print decode_2(
pwd=
'dloguszijluswogaqy',org=[[1,2],[0,1]])
print decode_3(
pwd=
"wjamdbkdeibr", org=[[1,2,3],[4,5,6],[7,8,10]])
|
【热门文章推荐】:
色情资源引发的百度网盘之战
浅谈XXE漏洞攻击与防御
当子域名遇上搜索引擎
安卓版Kali-linux搭建小记
利用chrome_remote_interface实现程序化、自动化Web安全测试
windows服务器信息收集工具
爬取搜索引擎之寻你千百度
端口扫描器的几种代码实现方案
利用python开发app实战
渗透神器系列-Metasploit
更多原创文章请扫描二维码,或点击“阅读原文”
个人技术博客地址: https://thief.one