基于python的MD5腳本開發(fā)思路
開發(fā)思路
1、通過 string模塊 自動生成字典;
2、使用permutations()函數(shù),對字典進行全排列;
3、使用 md5模塊 對全排列的字典進行轉換;
4、使用了多線程,分別對5~18位字符串進行md5碰撞,以防止時間太長(雖然現(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("請?zhí)顚慚D5:") 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腳本內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Windows環(huán)境打包python工程為可執(zhí)行程序的詳細過程
我的開發(fā)環(huán)境是windows7,然后系統(tǒng)是64位,安裝的python和wxpython都是32位的,本文記錄我怎樣用pyinstaller打包我用python開發(fā)的工程,在網(wǎng)上搜索了很多資源,基本上都是不全的,所以我在這兒記錄一下這個比較完整的過程,一起看看吧2024-01-01基于python+pandoc實現(xiàn)html批量轉word
pandoc是一個強大的文檔格式轉換工具,支持豐富的格式轉換,并盡可能的保留原來的排版,號稱文檔格式轉換的瑞士軍刀,本文將給大家介紹一下使用python搭配pandoc實現(xiàn)html批量轉word,感興趣的朋友可以參考閱讀下2023-09-09python超詳細實現(xiàn)完整學生成績管理系統(tǒng)
讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實現(xiàn)一個完整版學生成績管理系統(tǒng),大家可以在過程中查缺補漏,提升水平2022-03-03