题目 1234小明养成了定期修改密码的好习惯,同时,他还是一个CTF爱好者。有一天,他突发奇想,用flag格式来设置密码,为了防止忘记密码,他还把密码进行了md5加密。为了避免被其他人看到全部密码,他还特意修改了其中部分字符为#。你能猜出他的密码吗?plaintext = flag{#00#_P4ssw0rd_N3v3r_F0rg3t_63####}md5 = ac7f4d52c3924925aa9c8a7a1f522451PS: 第一个#是大写字母,第二个#是小写字母,其他是数字。 思路MD5 是一种哈希函数,特点是: 任意输入 → 固定 128 bit(32位十六进制)输出不可逆:无法从哈希值反推原文确定性:相同输入永远得到相同输出利用确定性来验证结果得到flag EXP 12345678910111213141516171819202122232425262728import hashlibimport itertoolsimport stringkey='ac7f4d52c3924925aa9c8a7a1f522451'c='flag{#00#_P4ssw0rd_N3v3r_F0rg3t_63####}'c=c.split('#')#用'#'把c分割开print(c)dir='1234567890'#笛卡尔积,0-9选4个进行排列组合10^4个dir_list=itertools.product(dir,repeat=4)a=string.ascii_lowercase #a-zb=string.ascii_uppercase #A-z#拼接for j in dir_list: for i in a: for k in b: m=c[0]+''.join(k)+c[1]+''.join(i)+c[2]+''.join(j)+c[-1] hash=hashlib.md5() hash.update(bytes(m,encoding='utf-8')) res=hash.hexdigest() if res==key: print(m) print(res) exit(0)