手把手教你使用Python解決簡(jiǎn)單的zip文件解壓密碼
簡(jiǎn)介
使用的核心模塊是python標(biāo)準(zhǔn)庫中的zipfile模塊。這個(gè)模塊可以實(shí)現(xiàn)zip文件的各種功能,具體可以查看官方參考文檔。這里的暴力破解的意思是對(duì)密碼可能序列中的值一個(gè)一個(gè)進(jìn)行密碼嘗試,這對(duì)人來說是很難的,可是對(duì)計(jì)算機(jī)而言并不難。有時(shí)候我們下載的zip文件需要密碼解壓而我們不知道,需要付費(fèi)才知道。所以這里主要介紹兩種暴力破解的密碼:純數(shù)字密碼和英文數(shù)字組合密碼。
文件創(chuàng)建
首先測(cè)試文件為test.txt(僅包含單行文本),壓縮后文件為test.zip,壓縮密碼為2340,壓縮后刪除目錄下的txt文件。。
上圖注意勾選傳統(tǒng)加密。
純數(shù)字密碼
指的是不用0開頭的數(shù)字密碼,0開頭見后面的字母組合。原理就是zipfile模塊解壓壓縮文件時(shí),一旦密碼不正確,程序會(huì)終止,在try語句只有成功解壓的密碼才會(huì)執(zhí)行到extract函數(shù)調(diào)用后面的語句。
代碼:
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()
顯然,解壓成功,這里提一下這種編碼 密碼的方式只適用于傳統(tǒng)zip加密,winrar有一種新式的默認(rèn)加密方式,是不可以的。
字母數(shù)字混合密碼
這里情況密碼組合太多,為了防止內(nèi)存溢出,改用迭代器。這種情況費(fèi)時(shí)很久,可以閑來無事掛著腳本。這里再次壓縮文件,密碼為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): # 實(shí)例化對(duì)象時(shí)給出密碼位數(shù)范圍,一般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()
字符的序列組合很多,需要等待。
補(bǔ)充說明
很多人反饋這個(gè)方法無效,這主要是因?yàn)槲募窂讲徽_(我的代碼是默認(rèn)該P(yáng)ython腳本所在目錄下的zip文件進(jìn)行解壓的)和加密方式并非傳統(tǒng)加密。這種暴力破解方法只在自己大致記得密碼位數(shù)和密碼格式(如只有字母等)時(shí)比較實(shí)用,完全的暴力破解是不現(xiàn)實(shí)的,畢竟做加密的也不是白做的。
到此這篇關(guān)于手把手教你使用Python解決簡(jiǎn)單的zip文件解壓密碼的文章就介紹到這了,更多相關(guān)Python zip文件解壓密碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python3中celery異步框架簡(jiǎn)單使用+守護(hù)進(jìn)程方式啟動(dòng)
這篇文章主要介紹了python3中celery異步框架簡(jiǎn)單使用+守護(hù)進(jìn)程方式啟動(dòng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01教你用Python腳本快速為iOS10生成圖標(biāo)和截屏
這篇文章主要介紹了教你用Python快速為iOS10生成圖標(biāo)和截屏的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09Python實(shí)現(xiàn)繪制3D地球旋轉(zhuǎn)效果
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)繪制出3D地球旋轉(zhuǎn)的效果,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2023-02-02用python實(shí)現(xiàn)超強(qiáng)的加密軟件
大家好,本篇文章主要講的是用python實(shí)現(xiàn)超強(qiáng)的加密軟件,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01python 如何用 Hypothesis 來自動(dòng)化單元測(cè)試
這篇文章主要介紹了python 如何用 Hypothesis 來自動(dòng)化單元測(cè)試,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03PyCharm+Pipenv虛擬環(huán)境開發(fā)和依賴管理的教程詳解
這篇文章主要介紹了PyCharm+Pipenv虛擬環(huán)境作開發(fā)和依賴管理的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04python實(shí)現(xiàn)汽車管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)汽車管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11Python實(shí)現(xiàn)更改圖片尺寸大小的方法(基于Pillow包)
這篇文章主要介紹了Python實(shí)現(xiàn)更改圖片尺寸大小的方法,結(jié)合實(shí)例形式分析了Python基于Pillow包更改圖片屬性的相關(guān)技巧,需要的朋友可以參考下2016-09-09