CTF中的解密

ctf必备解密网站

1、密码

维吉尼亚
https://www.guballa.de/vigenere-solver
brainfuck密码
https://www.nayuki.io/page/brainfuck-interpreter-javascript
字符串转16进制
http://www.3464.com/tools/StrToHex/
进制转换(这里如果这个数太大,这里可以解决)
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=10%E8%BD%AC%E6%8D%A2%E6%88%90%E4%BA%8C%E8%BF%9B%E5%88%B6&oq=10%25E8%25BD%25AC%25E6%258D%25A216&rsv_pq=b2aaa4a900006164&rsv_t=c585GpBLAmvpieM48PKR9QDP%2BJpsW3F14XD8RRkUVGrt%2BgnKSqffNWd8R4s&rqlang=cn&rsv_enter=1&rsv_sug3=1&rsv_sug1=1&rsv_sug7=100&bs=10%E8%BD%AC%E6%8D%A216

md5
http://www.dmd5.com/
生成二维码
http://tool.chinaz.com/qrcode
词频分析
http://www.aihanyu.org/cncorpus/CpsTongji.aspx
https://quipqiup.com/
libc库查询
http://libcdb.com/
栅栏密码
http://www.qqxiuzi.cn/bianma/zhalanmima.php
解密代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char s[]= "tn c0afsiwal kes,hwit1r g,npt ttessfu}ua u hmqik e {m, n huiouosarwCniibecesnren.";
char t[86]= "";
int i,j,k;
k=0;
for (i=0;i<17;i++)
{
for(j=0;j<5;j++)
{
t[k++]= ch[j*17+i];
}
}
for(i=0;i<85;i++)
{
printf("%c",t[i]);
}

当铺密码
王夫 井工 夫口 由中人 井中 夫夫 由中大:67 84 70 123 82 77 125
凯撒密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'ByStudent'
lstr="""U8Y]:8KdJHTXRI>XU#?!K_ecJH]kJG*bRH7YJH7YSH]*=93dVZ3^S8*$:8"&:9U]RH;g=8Y!U92'=j*$KH]ZSj&[S#!gU#*dK9\."""
for p in range(127):
str1 = ''
for i in lstr:
temp = chr((ord(i)+p)%127)
if 32<ord(temp)<127 :
str1 = str1 + temp
feel = 1
else:
feel = 0
break
if feel == 1:
print(str1)

莫斯密码
http://www.jb51.net/tools/morse.htm
希尔密码
密文: 22,09,00,12,03,01,10,03,04,08,01,17 (明文:wjamdbkdeibr)
解题思路:使用的矩阵是 1 2 3 4 5 6 7 8 10

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
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__Url__ = 'Http://www.purpleroc.com'
__author__ = 'Tracy_梓朋'
from numpy import *
Dic = {chr(i+97):i for i in range(26)}
def decode(pwd, 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)
#print temp
#print org
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))
#print xx[j, i] % 26
else:
#print xx[j, i]
result.append(chr(xx[j, i] + 97))
return result
def get_vmatrix(org):
org_adjoin = org.I*linalg.det(org)
print org_adjoin
org_det = int(str(abs(linalg.det(org))).split('.')[0])
print org_det
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])
#print org_final
return org_final
if __name__ == '__main__':
''' for test
pwd = list("act")
org = matrix(array([[6, 24, 1], [13 , 16, 10], [20, 17, 15]]))
result = decode(pwd, org)
print "".join(result)
deorg = matrix(array([[8, 5, 10], [21 , 8, 21], [21, 12, 8]]))
result = decode(result, deorg)
print "".join(result)
'''
pwd = "wjamdbkdeibr"
pwd = list(pwd)
org = matrix(array([[1,2,3],[4,5,6],[7,8,10]]))
org_vm = get_vmatrix(org)
print org_vm
print "Your flag is :" + "".join(decode(pwd, org_vm))

unicode编码,时间戳
http://tool.chinaz.com/Tools/Unicode.aspx

手机密码(最后一位不能超过4,85(错))

键盘密码(123–x,y)

RSA加密过程

1
2
3
4
5
6
7
8
9
找到两个大素数p和q,计算出n=p×q
得到φ=(p−1)×(q−1),然后选择一个e(1大于e小于φ),且gcd(φ,e)=1,gcd为最大公约数,即e和φ互质(互为质数)
计算出d
,计算方法:(e×d)%φ=1
得到了公私钥对,其中{e,n}
为公钥,{d,n}为私钥。
针对明文M,进行加密:C=Me%n,得到的C
即为密文
针对密文C,进行解密,M=Cd%n,得到的M即为明文

攻击方法
1、直接分解n(前提是n比较小)
2、共模攻击,N相同
3、低加密指数攻击
4、低加密指数广播攻击:这个识别起来比较简单,加密指数较低,并且使用了相同的加密指数给一个接受者的群发送相同的信息,那么可以进行广播攻击得到明文。

Donate
-------------本文结束感谢您的阅读-------------