基于python的MD5脚本开发思路

基于python的MD5脚本开发思路

目录

开发思路

md5碰撞函数

主函数

完整代码脚本

开发思路

1、通过 string模块 自动生成字典;

2、使用permutations()函数,对字典进行全排列;

3、使用 md5模块 对全排列的字典进行转换;

4、使用了多线程,分别对5~18位字符串进行md5碰撞,以防止时间太长(虽然现在也要很久)。

md5碰撞函数 def md5_poj(self, md5_value, k): if len(md5_value) != 32: print("error") return md5_value = md5_value.lower() # permutations() 全排列 for item in permutations(all_letters, k): item = "".join(item) if item == "hongrisec@2019": print(item) if md5(item.encode()).hexdigest() == md5_value: print('\n success: ' + md5_value + ' ==> ' + item) self.__mdfive = 1

其中 if len(md5_value) != 32 判断所输入的md5是否为32位的

主函数 def main(self): NT_md5 = input("请填写MD5:") start_time = time() t_list = [] print("正在查询...") # 添加线程 t_first = threading.Thread(target=self.md5_first, args=(NT_md5,)) t_first.daemon = 1 t_first.start() for k in range(5, 18): t = Process(target=self.md5_poj, args=(NT_md5, k)) # t = threading.Thread(target=self.md5_poj, args=(NT_md5, k)) t.daemon = 1 # 守护程序 t_list.append(t) # 启动所有线程 for i in t_list: i.start() # 当 __mdfive == 1 时结束所有线程 while 1: if self.__mdfive: break print("\n查询结束!") print('使用了 %f 秒'%(time() - start_time)) 完整代码脚本 import threading from multiprocessing import Process from hashlib import md5 from itertools import permutations from string import ascii_letters, digits, ascii_lowercase, ascii_uppercase from time import time all_letters = ascii_lowercase + '.,;@' + digits class MDfive: def __init__(self): self.__mdfive = 0 def md5_poj(self, md5_value, k): if len(md5_value) != 32: print("error") return md5_value = md5_value.lower() # permutations() 全排列 for item in permutations(all_letters, k): item = "".join(item) if item == "hongrisec@2019": print(item) if md5(item.encode()).hexdigest() == md5_value: print('\n success: ' + md5_value + ' ==> ' + item) self.__mdfive = 1 # 判断 md5 是否与空匹配 def md5_first(self, md5_firstvalue): if len(md5_firstvalue) != 32: elif md5_firstvalue == "31d6cfe0d16ae931b73c59d7e0c089c0": print("\n密码为空!") self.__mdfive = 1 def main(self): NT_md5 = input("请输入MD5:") start_time = time() t_list = [] print("正在查询...") # 添加线程 t_first = threading.Thread(target=self.md5_first, args=(NT_md5,)) t_first.daemon = 1 t_first.start() for k in range(5, 18): t = Process(target=self.md5_poj, args=(NT_md5, k)) # t = threading.Thread(target=self.md5_poj, args=(NT_md5, k)) t.daemon = 1 # 守护程序 t_list.append(t) # 启动所有线程 for i in t_list: i.start() # 当 __mdfive == 1 时结束所有线程 while 1: if self.__mdfive: break print("\n查询结束!") print('使用了 %f 秒'%(time() - start_time)) if __name__ == '__main__': MDfive().main()

到此这篇关于基于python的MD5脚本的文章就介绍到这了,更多相关python MD5脚本内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    excel怎么用乘法函数

    excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、首先用鼠标选中要计算的单元格。2、然后选中单元格后点击左上方工具栏的fx公

    excel中乘法函数是什么?

    excel中乘法函数是什么?,乘法,函数,什么,打开表格,在C1单元格中输入“=A1*B1”乘法公式。以此类推到多个单元。1、A1*B1=C1的Excel乘法公式

    标准差excel用什么函数?

    标准差excel用什么函数?,函数,标准,什么,在数据单元格的下方输入l标准差公式函数公式“=STDEVPA(C2:C6)”。按下回车,求出标准公差值。详细

    excel常用函数都有哪些?

    excel常用函数都有哪些?,函数,哪些,常用,1、SUM函数:SUM函数的作用是求和。函数公式为=sum()例如:统计一个单元格区域:=sum(A1:A10)  统计多个

    atsl电脑板故障|atsl车身控制模块故障

    atsl电脑板故障|atsl车身控制模块故障,atsl电脑板故障,1、2机械故障通过维修更换内部机械零件,可以解决机械故障。2、电路的故障有保险丝烧

    金蝶eas固定资产模块

    金蝶eas固定资产模块,,1.金蝶EAS8O版本中固定资产模块中变更如何操作路径:固定资产管理-固定资产管理-业务处理-固定资产变更步骤:1、在变更