網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
開(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í)顚慚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()
原文鏈接:https://www.cnblogs.com/spmonkey/p/16067719.html
相關(guān)推薦
- 2022-06-25 pycharm中venv文件夾自定義處理方式圖解_相關(guān)技巧
- 2022-05-13 C語(yǔ)言中動(dòng)態(tài)內(nèi)存分配malloc、calloc和realloc函數(shù)解析_C 語(yǔ)言
- 2022-03-11 解決 fatal error LNK1120: 1 unresolved externals 問(wèn)題
- 2022-10-06 Django數(shù)據(jù)映射(一對(duì)一,一對(duì)多,多對(duì)多)_python
- 2022-04-25 Pandas?中的join函數(shù)應(yīng)用實(shí)現(xiàn)刪除多余的空行_python
- 2022-04-18 html2canvas 不支持圖片的object-fit樣式
- 2022-03-23 如何解決Mac中的Docker宿主機(jī)與容器無(wú)法通信(MacOS下解決宿主機(jī)和docker容器網(wǎng)絡(luò)互通
- 2021-12-25 常用時(shí)間處理方法:時(shí)間戳和格式化時(shí)間之間轉(zhuǎn)換;時(shí)間比大小
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支