BUUCTF 每日打卡 2021-3-29
引言
新的一周,计划执行的第二天 又萌生出了一个新的计划:600多页的 C Primer Plus 只要我每天看20页就能一个月看完😂 不过下个月决定学GO语言,不知道能不能执行计划(咕咕咕)
丢失的MD5
原题代码: 1
2
3
4
5
6
7
8
9import 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 des1
2
3
4Traceback (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 hashing1
2
3
4
5
6
7
8
9import 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
当然,搜题解之前搜了搜关于 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
一个小插曲: 我还特地搜了一下,我是不会告诉你们俗称“拉面女神”的[滑稽]
结语
第二天,希望能坚持