0%

BUUCTF 每日打卡 2021-3-29

BUUCTF 每日打卡 2021-3-29

引言

新的一周,计划执行的第二天 又萌生出了一个新的计划:600多页的 C Primer Plus 只要我每天看20页就能一个月看完😂 不过下个月决定学GO语言,不知道能不能执行计划(咕咕咕)

丢失的MD5

原题代码:

1
2
3
4
5
6
7
8
9
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
是用python2写的,仅仅修改了print,还是会报错
1
2
3
4
Traceback (most recent call last):
File "D:/BUUCTF/Crypto/丢失的MD5/丢失的MD5/md5 (2).py", line 6, in <module>
m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
TypeError: Unicode-objects must be encoded before hashing
要对 m.update() 部分进行 utf-8 编码 修改完后代码如下:
1
2
3
4
5
6
7
8
9
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').encode('utf-8'))
des=m.hexdigest()
if 'e9032' in des and 'da' in des and '911513' in des:
print(des)
然后运行结果为:
1
e9032994dabac08080091151380478a2
之后就不知道要干什么了 搜了搜题解[捂脸],结果说flag就是输出部分(wtm人傻了)

当然,搜题解之前搜了搜关于 MD5 的资料(对于哈希函数这块一直是云里雾里的) MD5加密算法:https://www.tomorrow.wiki/archives/503来源TOMORROW星辰:www.tomorrow.wik 简单概括起来,MD5 算法的过程分为四步:处理原文,设置初始值,循环加工,拼接结果。(底层实现非常复杂) 破解MD5加密算法:https://www.tomorrow.wiki/archives/562来源TOMORROW星辰:www.tomorrow.wik 破解算法都是利用 MD5 碰撞原理:被加密的数据与 MD5 加密算法所生成的哈希值并不是一一对应的关系,而是多对一,也就是说不同的数据经过 MD5 加密算法处理后,可能生成同样的 MD5 哈希值。通过碰撞寻找可以生成相同的哈希值的数据来实现破解。 其中暴力破解法的时间成本太高了,字典法则是空间成本太高,彩虹表法的时间成本和空间成本都较为均衡,相对较低,实用性更强。但是,计算机技术发展现在,利用分布式技术仍是可以有效利用以上方法进行破解 MD5 加密的。因此,这些方法都是有广泛应用的。 2004 年,中国数学家王小云等提出了一种新的 MD5 碰撞方法,使得 MD5 加密算法破解的效率大大提高。 2009 年,冯登国、谢涛提出了利用差分攻击的,使得 MD5 加密算法的破解复杂度进一步降低。 百度上搜的差分攻击(看不懂):https://baike.baidu.com/item/%E5%B7%AE%E5%88%86%E6%94%BB%E5%87%BB

一个小插曲: 在这里插入图片描述 我还特地搜了一下,我是不会告诉你们俗称“拉面女神”的[滑稽]

结语

第二天,希望能坚持

欢迎关注我的其它发布渠道

-------- 本文结束 感谢阅读 --------