2017中孚信息杯-小明的生日-Writeup

题目:小明的生日-Writeup

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

0175501585710a89h5a60dc9ed2f88d7

纯考写脚本

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

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

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]


本博客采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议(CC BY-NC-SA 4.0) 发布.转载请注明出处
本文链接:https://ares-x.com/2017/11/07/2017中孚信息杯-小明的生日-Writeup/