?
題目描述:
我們得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,問號部分是未知大寫字母,為了確定這個神秘字符串,我們通過了其他途徑獲得了這個字串的32位MD5碼。但是我們獲得它的32位MD5碼也是殘缺不全,E903???4DAB???08???51?80??8A?,請猜出神秘字符串的原本模樣,并且提交這個字串的32位MD5碼作為答案。 注意:得到的 flag 請包上 flag{} 提交
解題思路:
1、仔細閱讀題目,明白我們需要還原完整的MD5碼,作為flag提交。
2、缺失的字符為大寫字母,可以通過枚舉來篩選出正確的MD5碼。
3、通過使用python寫出代碼來猜出神秘字符串的原本模樣,代碼邏輯是將TASC?O3RJMV?WDJKX?ZM這串字符串中的問好使用字母從AAAAA代替然后轉換為32位的MD5,將得出的MD5前4位與E903比配如果相同則輸出直到5個問好最后都是ZZZZZ
設計程序:
import hashlibmystery_md5 = "E903???4DAB????08?????51?80??8A?"
for i in range(65, 91):for j in range(65, 91):for k in range(65, 91):#print(f"TASC{chr(i)}O3RJMV{chr(j)}WDJKX{chr(k)}ZMd", end=";")# 計算候選字符串的MD5哈希值plaintext = f"TASC{chr(i)}O3RJMV{chr(j)}WDJKX{chr(k)}ZM"md5_hash = hashlib.md5(plaintext.encode('utf8')).hexdigest().upper()#注意大小寫#print(md5_hash[:4])# 比較MD5碼的部分if md5_hash[:4] == mystery_md5[:4]:print(plaintext)print(md5_hash)
兩秒就出來了
?flag{E9032994DABAC08080091151380478A2}