题目:小明的生日-Writeup

97年出生的小明用自己的生日作为自己网站的密码,现在得到一串被篡改过一个字符的字符串,你能解出小明的生日吗?

0175501585710a89h5a60dc9ed2f88d7

纯考写脚本

思路就是md5碰撞去匹配生日,但是考点在如何从12*31个md5中去找到那个被修改了一位之前的md5

py中有现成的库difflib去比较两个字符串的相似程度,所以找出其中相似值最大的就好了

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
import hashlib
import difflib

days=[]

# 生成生日日期

for i in range(1,13):
if i <=9:
mounth='0'+str(i)
else:
mounth=str(i)
for j in range(1,32):
if j <=9:
day='0'+str(j)
else:
day=str(j)
birth='1997'+mounth+day
days.append(birth)

code='0175501585710a89h5a60dc9ed2f88d7'

result = {}
ratios = []


#碰撞md5,并计算相似值,以字典的形式储存最后读取出相似值最高的值

for day in days:
md5 = hashlib.md5(day.encode('utf-8')).hexdigest()
seq = difflib.SequenceMatcher(None,md5,code)
ratio = seq.ratio()
ratios.append(ratio)
result[ratio]=day
print ratio,day

tmax = max(ratios)
print tmax
print result[tmax]


2017-11-07
Contents

⬆︎TOP