室友的Zip加密檔案探祕,Python解決Zip加密檔案探索祕密!
之前在家裡的老電腦中,發現一個加密zip壓縮包,由於時隔太久忘記密碼了,依稀記得密碼是6位字母加數字,網上下載了很多破解密碼的軟體都沒有效果,於是想到自己用Python寫一個暴力破解密碼的指令碼。
Python有一個內建模組zipfile可以幹這個事情,測試一波,一個測試檔案,設定解壓密碼為123。
很多人學習python,不知道從何學起。
很多人學習python,掌握了基本語法過後,不知道在哪裡尋找案例上手。
很多已經做案例的人,卻不知道如何去學習更加高深的知識。
那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視訊教程,電子書籍,以及課程的原始碼!??¤
QQ群:232030553
import zipfile
# 建立檔案控制程式碼
file = zipfile.ZipFile("測試.zip", 'r')
# 提取壓縮檔案中的內容,注意密碼必須是bytes格式,path表示提取到哪
file.extractall(path='.', pwd='123'.encode('utf-8'))
執行效果如下圖所示,提取成功。
好了開始破解老檔案的密碼,為了提高速度我加了多執行緒最初的程式碼:
import zipfile
import itertools
from concurrent.futures import ThreadPoolExecutor
def extract(file, password):
if not flag: return
file.extractall(path='.', pwd=''.join(password).encode('utf-8'))
def result(f):
exception = f.exception()
if not exception:
# 如果獲取不到異常說明破解成功
print('密碼為:', f.pwd)
global flag
flag = False
if __name__ == '__main__':
# 建立一個標誌用於判斷密碼是否破解成功
flag = True
# 建立一個執行緒池
pool = ThreadPoolExecutor(100)
nums = [str(i) for i in range(10)]
chrs = [chr(i) for i in range(65, 91)]
# 生成數字+字母的6位數密碼
password_lst = itertools.permutations(nums + chrs, 6)
# 建立檔案控制程式碼
zfile = zipfile.ZipFile("加密檔案.zip", 'r')
for pwd in password_lst:
if not flag: break
f = pool.submit(extract, zfile, pwd)
f.pwd = pwd
f.pool = pool
f.add_done_callback(result)
這個程式碼有個問題,跑一會兒記憶體就爆了!原因:ThreadPoolExecutor預設使用的是無界佇列,嘗試密碼的速度跟不上生產密碼的速度,會把生產任務無限新增到佇列中。導致記憶體被佔滿。記憶體直接飆到95:
然後程式奔潰:
看了一下原始碼發現ThreadPoolExecutor內部使用的是無界佇列,所以導致記憶體直接飆滿,重寫ThreadPoolExecutor類中的_work_queue屬性,將無界佇列改成有界佇列,這樣就不會出現記憶體爆滿的問題,看程式碼:
import queue
from concurrent.futures import ThreadPoolExecutor
class BoundedThreadPoolExecutor(ThreadPoolExecutor):
def __init__(self, max_workers=None, thread_name_prefix=''):
super().__init__(max_workers, thread_name_prefix)
self._work_queue = queue.Queue(self._max_workers * 2) # 設定佇列大小
最後破解成功,如下圖所示。
相關文章
- node ~ zip壓縮 && 檔案加密加密
- 暴力破解zip加密檔案加密
- 「Python實用祕技01」複雜zip檔案的解壓Python
- ZipArchive解壓縮zip檔案Hive
- Python 中最快解壓 zip 檔案的方法Python
- 探祕 Mach-O 檔案Mac
- linux下解壓.gz檔案、.cpio檔案、zip檔案Linux
- 檔案流下載檔案,zip/其他格式檔案
- Unix 下批量解壓zip檔案
- Violent Python 暴力破解zip檔案Python
- JAVA ZIP 處理檔案Java
- 關於解壓zip檔案的問題
- 使用zlib庫解壓zip檔案
- Java zip解壓,並遍歷zip中的配置檔案 .cfg或.propertiesJava
- 自己寫的一個 java 解壓 rar zip 帶密碼 檔案Java密碼
- Python模組學習:zipfile zip檔案操作Python
- 用java解壓zip檔案的中文問題Java
- *.zip.001 & *.zip.002等型別檔案解圧方法型別
- 【python3】匯入zip 檔案裡的模組Python
- php線上解壓zip檔案的方法PHP
- java 把檔案壓縮成 zipJava
- java 生成 zip格式 壓縮檔案Java
- 快速解壓 Mac上zip 檔案的兩種方法Mac
- zip是什麼格式 怎麼把檔案打包成zip格式
- php 建立壓縮包zip,並將指定檔案放入zip中PHP
- Linux 解壓zip檔案詳解之unzip命令!Linux
- php 檔案加密PHP加密
- openssl加密檔案加密
- RSA加密檔案加密
- PYTHON如何在記憶體中生成ZIP檔案Python記憶體
- 用PHP實現上傳的ZIP檔案的解壓PHP
- word文件怎麼加密檔案?Word利用巨集一鍵給高機密檔案加密的方法加密
- word文件怎麼加密檔案?Word利用宏一鍵給高機密檔案加密的方法加密
- linux下解壓部分zip檔案存在亂碼解決辦法Linux
- zip檔案刪除到哪裡找回?兩個良策足以解決!
- fastadmin匯出圖片zip檔案AST
- linux下zip檔案解壓亂碼的問題Linux
- 使用jar與zip壓縮解壓檔案的區別JAR