BUCCTF中Crypto的还原大师的解法

题目

我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4DAB????08?????51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。 注意:得到的 flag 请包上 flag{} 提交

分析

字符串的未知大写字母只有三位,尝试爆破手段

写pycharm代码

import hashlib
 
m = "TASC?O3RJMV?WDJKX?ZM"
 
# range() 创建整数列表
# ord() 返回参数的ASCII或Unicode值
for i in range(ord('A'), ord('Z') + 1):
    # .replace() 替换指定字符串为目标字符串,可限定次数
    # chr() 返回ASCII或Unicode值对应参数
    m1 = m.replace('?', chr(i), 1)
    for j in range(ord('A'), ord('Z') + 1):
        m2 = m1.replace('?', chr(j), 1)
        for k in range(ord('A'), ord('Z') + 1):
            m3 = m2.replace('?', chr(k), 1)
            # hashlib.md5() 对字符串进行md5加密
                # .encode() 编码 hashlib的要求
            # .hexdigest() 返回十六进制摘要字符串
            # .upper() 字符串所有字母大写
            m3 = hashlib.md5(m3.encode('utf-8')).hexdigest().upper()
            if (m3[:4] == "E903" and m3[7:11] == "4DAB" and m3[15:17] == "08" and
                    m3[22:24] == "51" and m3[25:27] == "80" and m3[29:31] == "8A"):
                print(m3)
 

FLAG

flag{E9032994DABAC08080091151380478A2}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值