壓縮文件的密碼不知道?小問題,Python分分鍾就解開了!


上篇咱們學習了怎么用Python壓縮文件,但是有時候有些壓縮文件是有密碼的,或者咱們自己設置了密碼但是忘記了,怎么辦呢?今天教大家怎么用Python破解壓縮文件密碼。
在這里插入圖片描述
開始之前,大家有什么需要的直接點我免費領取
Python環境、pycharm編輯器/永久激活/翻譯插件
python零基礎視頻教程
Python界面開發實戰教程
Python爬蟲實戰教程
Python數據分析實戰教程
python游戲開發實戰教程
Python 電子書100本
本節源碼、福利文件
統統免費領取
Python相關問題可解答
Python相關外包需求可發布
Python相關招聘需求可發布

准備材料

這期准備材料比較少,都是基礎代碼。

  1. 掌握基礎for循環,if判斷。
  2. 掌握遞歸的用法。

實現原理

我們來討論一下暴力破解的實現原理吧!

首先我們來看一下,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根據自己的想要填下,比如是數字,或者只有字母。

 

怎么樣,簡單嗎?大家可以把遇到的問題留言,咱們來一一解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM