上篇咱們學習了怎么用Python壓縮文件,但是有時候有些壓縮文件是有密碼的,或者咱們自己設置了密碼但是忘記了,怎么辦呢?今天教大家怎么用Python破解壓縮文件密碼。
開始之前,大家有什么需要的直接點我免費領取
Python環境、pycharm編輯器/永久激活/翻譯插件
python零基礎視頻教程
Python界面開發實戰教程
Python爬蟲實戰教程
Python數據分析實戰教程
python游戲開發實戰教程
Python 電子書100本
本節源碼、福利文件
統統免費領取
Python相關問題可解答
Python相關外包需求可發布
Python相關招聘需求可發布
這期准備材料比較少,都是基礎代碼。
- 掌握基礎for循環,if判斷。
- 掌握遞歸的用法。
我們來討論一下暴力破解的實現原理吧!
首先我們來看一下,1,2這兩個數字有多少種兩位數以下的組合情況。
是的,有6種:1、2、11,12、21、22。
如果是123,有多少種兩位數的組合情況。
12種,分別是:1、2、3、11,12、13、21、22、23、31、32、33
換種方式:
我們的密碼是1位數的,請問有多少種情況!
答案是10種,0也是。密碼從0到9的數字
那我如果我們設置的密碼是兩位數的,有多少種情況!
答案是100種。從00到99的數字。
那我們發現一個規律,對於這種簡單的操作,那我們就可以使用一個for循環來解決。
代碼如下:
純數字密碼破解
#這種情況不包含000001的情況。 zip_file = zipfile.ZipFile("zip.zip") zip_list = zip_file.namelist() # 得到壓縮包里所有文件 for i in range(9999): x=str(i) y=False for f in zip_list: try: zip_file.extract(f, "zip",x.encode('utf-8')) # 循環解壓文件到指定目錄 print("密碼正確,密碼是"+x) y=True except BaseException as e: print("密碼輸入錯誤"+x) break if y==True: break zip_file.close() # 關閉文件,必須有,釋放內存
上面這種是純數字的破解方式,下面我們來實現不是純密碼的情況
list=[1,2,3] for i in list: print(i) for j in list: print(i+j) for y in list: print(i+j+y)
如上,是基本原理,根據需要,我們可以自己添加需要的位數。上面這個是3位數以下的所有情況。
看了上面的代碼,我們想做一下簡化操作,如果密碼有60位,那我們豈不是要寫60個for循環。
那我們來看一下升級版:
字符串暴力破解
# 包含000001的情況。 # zmb="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" zmb = "abcdefg" list = zmb.replace("", " ").split() def blpj(list, num=2, x="", a=1, y=[]): a += 1 for j in list: y.append(x + j) # print(x+j) if a != num + 1: blpj(x=x + j, num=num, a=a, list=list)#內部調用自己,遞歸處理 return len(y), y#返回一個密碼組合列表。 print(blpj(list, num=4))#調用並打印,list根據自己的想要填下,比如是數字,或者只有字母。
怎么樣,簡單嗎?大家可以把遇到的問題留言,咱們來一一解決。