基于python的MD5腳本開(kāi)發(fā)思路
開(kāi)發(fā)思路
1、通過(guò) string模塊 自動(dòng)生成字典;
2、使用permutations()函數(shù),對(duì)字典進(jìn)行全排列;
3、使用 md5模塊 對(duì)全排列的字典進(jìn)行轉(zhuǎn)換;
4、使用了多線程,分別對(duì)5~18位字符串進(jìn)行md5碰撞,以防止時(shí)間太長(zhǎng)(雖然現(xiàn)在也要很久)。
md5碰撞函數(shù)
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位的
主函數(shù)
def main(self): NT_md5 = input("請(qǐng)?zhí)顚?xiě)MD5:") start_time = time() t_list = [] print("正在查詢(xún)...") # 添加線程 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 # 守護(hù)程序 t_list.append(t) # 啟動(dòng)所有線程 for i in t_list: i.start() # 當(dāng) __mdfive == 1 時(shí)結(jié)束所有線程 while 1: if self.__mdfive: break print("\n查詢(xún)結(jié)束!") 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("請(qǐng)輸入MD5:") start_time = time() t_list = [] print("正在查詢(xún)...") # 添加線程 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 # 守護(hù)程序 t_list.append(t) # 啟動(dòng)所有線程 for i in t_list: i.start() # 當(dāng) __mdfive == 1 時(shí)結(jié)束所有線程 while 1: if self.__mdfive: break print("\n查詢(xún)結(jié)束!") print('使用了 %f 秒'%(time() - start_time)) if __name__ == '__main__': MDfive().main()
到此這篇關(guān)于基于python的MD5腳本的文章就介紹到這了,更多相關(guān)python MD5腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于并發(fā)服務(wù)器幾種實(shí)現(xiàn)方法(總結(jié))
下面小編就為大家分享一篇基于并發(fā)服務(wù)器幾種實(shí)現(xiàn)方法(總結(jié)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12Windows環(huán)境打包python工程為可執(zhí)行程序的詳細(xì)過(guò)程
我的開(kāi)發(fā)環(huán)境是windows7,然后系統(tǒng)是64位,安裝的python和wxpython都是32位的,本文記錄我怎樣用pyinstaller打包我用python開(kāi)發(fā)的工程,在網(wǎng)上搜索了很多資源,基本上都是不全的,所以我在這兒記錄一下這個(gè)比較完整的過(guò)程,一起看看吧2024-01-01完美解決python遍歷刪除字典里值為空的元素報(bào)錯(cuò)問(wèn)題
下面小編就為大家?guī)?lái)一篇完美解決python遍歷刪除字典里值為空的元素報(bào)錯(cuò)問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09基于python+pandoc實(shí)現(xiàn)html批量轉(zhuǎn)word
pandoc是一個(gè)強(qiáng)大的文檔格式轉(zhuǎn)換工具,支持豐富的格式轉(zhuǎn)換,并盡可能的保留原來(lái)的排版,號(hào)稱(chēng)文檔格式轉(zhuǎn)換的瑞士軍刀,本文將給大家介紹一下使用python搭配pandoc實(shí)現(xiàn)html批量轉(zhuǎn)word,感興趣的朋友可以參考閱讀下2023-09-09python超詳細(xì)實(shí)現(xiàn)完整學(xué)生成績(jī)管理系統(tǒng)
讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)完整版學(xué)生成績(jī)管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2022-03-03