Crypto_BUUCTF_WriteUp | 还原大师
题目
我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4DAB????08?????51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。 注意:得到的 flag 请包上 flag{} 提交
分析
看了下 MD5 的加密流程,手算得算到下辈子。字符串的未知大写字母只有三位,尝试爆破。
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)
(写习惯了 C 写 Python 是真难受啊
Flag
flag{E9032994DABAC08080091151380478A2}
参考
MD5 算法-深流的小刘-知乎
python中如何遍历26个英文字母?三种办法-cbyzdr-CSDN
Python range() 函数用法-菜鸟教程
Python ord() 函数-菜鸟教程
Python中修改字符串单个字符的方法-MengYiKeNan-CSDN
Python Python的ord()函数的相反函数是什么-极客教程
使用python hashlib模块给明文字符串加密,以及如何撞库破解密码-点亮~黑夜-CSDN
python3中digest()和hexdigest()区别-可爱的喵酱丶-CSDN
Python字母大小写的转换(两种方法)-舍得斋-CSDN
本文作者:Guanz
本文链接:https://www.cnblogs.com/Guanz/p/17835016.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
标签:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步