欢迎来到代码驿站!

Python代码

当前位置:首页 > 软件编程 > Python代码

基于python的MD5脚本开发思路

时间:2023-01-02 09:21:33|栏目:Python代码|点击:

开发思路

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()

上一篇:详解Pymongo常用查询方法总结

栏    目:Python代码

下一篇:Python 函数简单易理解版

本文标题:基于python的MD5脚本开发思路

本文地址:http://www.codeinn.net/misctech/222756.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有