题目:md5.py
import hashlib
for i in range(32,127):
for j in range(32,127):
for k in range(32,127):
m=hashlib.md5()
m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
des=m.hexdigest()
if 'e9032' in des and 'da' in des and '911513' in des:
print des
注意:得到的 flag 请包上 flag{} 提交
解答
分析:
MD5 加密算法是计算机广泛使用的哈希算法之一,它能把任意长度的数据转化为固定长度的 128 位哈希值,通常以 32 位十六进制数字形式呈现。随着计算机技术的飞速发展,可以直接暴力破解。
这段代码是一个暴力破解 MD5 哈希值的程序,它尝试找到一个特定格式的字符串,使其 MD5 哈希值包含三个特定的子串:e9032、da和911513。
问题:
(经过网络查询得知)
- 语法错误:代码使用了 Python 2 的
print语句(没有括号),在 Python 3 中会导致语法错误。 - 编码问题:
hashlib.md5().update()方法需要字节对象,而不是字符串。在 Python 3 中,字符串需要编码为字节。
解决:
修复后的 Python 3 版本代码,添加了进度显示以提高可用性
import hashlib
for i in range(32, 127):
for j in range(32, 127):
for k in range(32, 127):
hash_object = hashlib.md5()
hash_object.update(b'TASC' + bytes([i]) + b'O3RJMV' + bytes([j]) + b'WDJKX' + bytes([k]) + b'ZM')
hash_digest = hash_object.hexdigest()
if 'e9032' in hash_digest and 'da' in hash_digest and '911513' in hash_digest:
print(hash_digest)
运行结果:
flag{e9032994dabac08080091151380478a2}
4538

被折叠的 条评论
为什么被折叠?



