您好,登錄后才能下訂單哦!
小編給大家分享一下如何使用Python解決簡單的zip文件解壓密碼,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
首先測試文件為test.txt(僅包含單行文本),壓縮后文件為test.zip,壓縮密碼為2340,壓縮后刪除目錄下的txt文件。。
上圖注意勾選傳統加密。
指的是不用0開頭的數字密碼,0開頭見后面的字母組合。原理就是zipfile模塊解壓壓縮文件時,一旦密碼不正確,程序會終止,在try語句只有成功解壓的密碼才會執行到extract函數調用后面的語句。
代碼:
import zipfile import time import threading startTime = time.time() # 判斷線程是否需要終止 flag = True def extract(password, file): try: password = str(password) file.extractall(path='.', pwd=password.encode('utf-8')) print("the password is {}".format(password)) nowTime = time.time() print("spend time is {}".format(nowTime-startTime)) global flag # 成功解壓其余線程終止 flag = False except Exception as e: print(e) def do_main(): zfile = zipfile.ZipFile("test.zip", 'r') # 開始嘗試 for number in range(1, 9999): if flag is True: t = threading.Thread(target=extract, args=(number, zfile)) t.start() t.join() if __name__ == '__main__': do_main()
顯然,解壓成功,這里提一下這種編碼 密碼的方式只適用于傳統zip加密,winrar有一種新式的默認加密方式,是不可以的。
這里情況密碼組合太多,為了防止內存溢出,改用迭代器。這種情況費時很久,可以閑來無事掛著腳本。這里再次壓縮文件,密碼為python。
import zipfile import random import time import sys class MyIterator(): # 單位字符集合 letters = 'abcdefghijklmnopqrstuvwxyz012345678' min_digits = 0 max_digits = 0 def __init__(self, min_digits, max_digits): # 實例化對象時給出密碼位數范圍,一般4到10位 if min_digits < max_digits: self.min_digits = min_digits self.max_digits = max_digits else: self.min_digits = max_digits self.max_digits = min_digits # 迭代器訪問定義 def __iter__(self): return self def __next__(self): rst = str() for item in range(0, random.randrange(self.min_digits, self.max_digits+1)): rst += random.choice(MyIterator.letters) return rst def extract(): start_time = time.time() zfile = zipfile.ZipFile("test.zip") for p in MyIterator(5, 6): try: zfile.extractall(path=".", pwd=str(p).encode('utf-8')) print("the password is {}".format(p)) now_time = time.time() print("spend time is {}".format(now_time-start_time)) sys.exit(0) except Exception as e: pass if __name__ == '__main__': extract()
字符的序列組合很多,需要等待。
看完了這篇文章,相信你對“如何使用Python解決簡單的zip文件解壓密碼”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。