BUUCTF(Crypto)——丢失的MD5

该文章已生成可运行项目,

题目: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 哈希值包含三个特定的子串:e9032da911513

问题:

(经过网络查询得知)

  1. 语法错误:代码使用了 Python 2 的print语句(没有括号),在 Python 3 中会导致语法错误。
  2. 编码问题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}

本文章已经生成可运行项目
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值