残缺的MD5
题面:
残缺的明文:NISA{mdfhg_odfhty_ojky6u0_ki70n}
密文:cfc6bcdf4cbeab03a66e8d2bbb84a8aa
下划线为残缺的数字或字母,请你找出完整的明文
这题已经给出了缺了三个字符的明文和md5密文,因为空格不多,我们直接上脚本爆破就可以了:
import hashlib
import itertools
word="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" #观察其他的区域推测空缺的部分都是字母或者数字
r=itertools.product(word,repeat=3) #生成爆破容器
answer="cfc6bcdf4cbeab03a66e8d2bbb84a8aa" #加密后的密文
for i in r:
dec = "NISA{mdfhg" + i[0] + "odfhty" + i[1] + "ojky6u0" + i[2] + "ki70n}" #开始枚举爆破
dec=dec.strip() #为了防止一些空格啥的给后面的比较带来不必要的麻烦,我们先预处理下,下面的strip同。
enc = hashlib.md5()
enc.update(dec)
code=enc.hexdigest() #md5加密
code=code.strip()
if(code==answer): #一旦枚举的密文匹配上了已知的密文,那么这就是flag了
print(dec)
我不懂加密,嗯,真不懂
题面:
import sys
key = 'ASDAEFECENSOREDSDFED'
flag = 'NISA{******************}'
if len(key) % 2 == 1:
print "Key Length Error"
sys.exit(1)
n = len(key) // 2
encrypted = ''
for c in flag:
c = ord(c)
for a, b in zip(key[0:n], key[n:2*n]):
c = (ord(a) * c + ord(b)) % 251
encrypted += '%02x' % c
print encrypted
加密后的密文是8e61bb192d196b6b86b3622c2b86c57d62d72c86e02c86b32cdf8473843f
咋一看好像是单密钥加密,绕了有点晕。
一开始打算是尝试逆向他的加密,后面放弃了
后面突然间发现,这个加密方式是每个字符都严格对应一个密文的(大喜
(这个特征其实有点明显,因为他是处理完一个字符就塞一个两位的16进制的字符进入密文里面)
那么我们就可以直接暴力打表了~~直接把已知的所有字符弄进去加密一遍就OK了!
import sys
key = 'ASDAEFECENSOREDSDFED'
words = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ{}_~!@#$%^&*()+=<>?/:[]-,.`|0123456789'
encrypted= '8e61bb192d196b6b86b3622c2b86c57d62d72c86e02c86b32cdf8473843f'
if len(key) % 2 == 1:
print "Key Length Error"
sys.exit(1)
n = len(key) // 2
for c in words:
d = c
c = ord(c)
for a, b in zip(key[0:n], key[n:2*n]):
c = (ord(a) * c + ord(b)) % 251
str= '%02x' % c
print d +" --> "+ str
得到:
a --> 3e
b --> 47
c --> 50
d --> 59
e --> 62
f --> 6b
g --> 74
h --> 7d
··············中间太长了略························
` --> 35
| --> 36
0 --> 7b
1 --> 84
2 --> 8d
3 --> 96
4 --> 9f
5 --> a8
6 --> b1
7 --> ba
8 --> c3
9 --> cc
然后写一个py脚本或者手打,把密文一一解出来就OK了!
Comments | NOTHING