前言
-
hashlib模块
-
string模块
-
itertools模块
一、编程要求
编写一个能破解md5的程序
二、完整代码
from hashlib import md5
from string import ascii_letters,digits,punctuation
from itertools import permutations
import time
all=ascii_letters+digits+punctuation
def brute_md5(md5_value):
md5_value=md5_value.lower()
if len(md5_value)==32:
count=5
start=time.time()
while(1):
for item in permutations(all,count):
item="".join(item)
if md5(item.encode()).hexdigest()==md5_value:
end=time.time()
print(end-start)
print(item)
return
count+=1
else:
print("不是有效的md5值")
md5_value = input()
brute_md5(md5_value)
# 94c51f6f1eaa3534e32cf8633778982e
all是由所有的英文字母,数字,特殊符号组成的字符串。permutations可以根据长度生成由字符串所构成的所有可能的排列组合,然后计算这些排列组合的MD5值直至和输入的MD5值相等结束。
count如果从1开始则耗费的时间是会比较久的,如果知道长度,速度会快很多。
所以建议将count改为5
![](https://i-blog.csdnimg.cn/blog_migrate/6bd67e97172ebbd18d4d6fcc01a242a0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/787b65fa04d514982676e1c5fab8602c.png)
结束语:
文章可能存在错误,欢迎指出。