基于python的MD5腳本開發(fā)思路
開發(fā)思路
1、通過 string模塊 自動(dòng)生成字典;
2、使用permutations()函數(shù),對(duì)字典進(jìn)行全排列;
3、使用 md5模塊 對(duì)全排列的字典進(jìn)行轉(zhuǎn)換;
4、使用了多線程,分別對(duì)5~18位字符串進(jìn)行md5碰撞,以防止時(shí)間太長(雖然現(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í)顚慚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 # 守護(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查詢結(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("正在查詢...")
# 添加線程
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查詢結(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ì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12
Windows環(huán)境打包python工程為可執(zhí)行程序的詳細(xì)過程
我的開發(fā)環(huán)境是windows7,然后系統(tǒng)是64位,安裝的python和wxpython都是32位的,本文記錄我怎樣用pyinstaller打包我用python開發(fā)的工程,在網(wǎng)上搜索了很多資源,基本上都是不全的,所以我在這兒記錄一下這個(gè)比較完整的過程,一起看看吧2024-01-01
完美解決python遍歷刪除字典里值為空的元素報(bào)錯(cuò)問題
下面小編就為大家?guī)硪黄昝澜鉀Qpython遍歷刪除字典里值為空的元素報(bào)錯(cuò)問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09
基于python+pandoc實(shí)現(xiàn)html批量轉(zhuǎn)word
pandoc是一個(gè)強(qiáng)大的文檔格式轉(zhuǎn)換工具,支持豐富的格式轉(zhuǎn)換,并盡可能的保留原來的排版,號(hào)稱文檔格式轉(zhuǎn)換的瑞士軍刀,本文將給大家介紹一下使用python搭配pandoc實(shí)現(xiàn)html批量轉(zhuǎn)word,感興趣的朋友可以參考閱讀下2023-09-09
python超詳細(xì)實(shí)現(xiàn)完整學(xué)生成績管理系統(tǒng)
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)完整版學(xué)生成績管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2022-03-03

