1. 程式人生 > 其它 >壓縮包密碼忘記了打不開?我用Python分分鐘就解決了

壓縮包密碼忘記了打不開?我用Python分分鐘就解決了

相信大家都遇到過這種情況,下載檔案的時候遇到壓縮包又沒有密碼,或者說自己設定的加密密碼,但是忘記了,就很難受~

但是~


在Python程式設計師面前,這都是小問題!



話不多說,我們直接開始操作.。

一、準備工作

我們先開啟一個加密的壓縮包嘗試原始方法解壓一下

然後彈出來讓我輸密碼

正常打不開,如果你點選跳過所有加密,它也不會開啟,直接就關閉當前你視窗了。

那正常情況下,我們能怎麼辦,什麼也辦不了,下一個會更乖。

我們開啟pycharm,新建一個py檔案,暫且我把它命名為zip_pwd

靈魂三問:沒有pycharm?Python也沒有?還不會安裝?

# 我給大家準備了這些資料,直接在群裡就可以免費領取了。
# 一群:872937351 (群滿了的話加二群)
# 二群:924040232
# python學習路線彙總
# 精品Python學習書籍100本
# Python入門視訊合集
# Python實戰案例
# Python面試題
# Python相關軟體工具/pycharm永久啟用


在這之前呢,我們先要去收集一些資訊,比如當前的密碼位數與型別。
型別包含包括它有沒有特殊字元,有沒有字串,是不是純數字。

假設我們現在已知資訊呢,總共有兩個,已知當前密碼型別為整形,六位數密碼。

我們先建立一個純數字6位密碼庫,你也可以去GitHub

上面下載一個包含所有字元的密碼字典庫,這個現在是開源的,破解時間具體要看設定的密碼長短、複雜與否。

二、開始操作

回到正題

已知我們現在的密碼是六位純數字,那麼怎麼自己建立密碼字典呢?

首先我們要完成一個檔案寫入的功能

首先宣告一個變數 f

f = open()
# Python內建函式  

open是一個IO流,可以完成檔案讀寫功能。

比如說我先想在一個檔案裡寫入一些內容,就可以通過open去做 。

然後我們通過open建立一個檔案,名字暫且命名為possword.txt,在加入一個寫入方式,以 w方式去寫入。

f = open('
password.txt','w')

然後通過迴圈去建立密碼,密碼設定個1000000

for id in range(1000000)

這時候需要建立一個password變數生成密碼,建立之前先匯入一個方法的包。

import zipfile

然後通過password可以開始生成密碼了 ,這個zfill等於 6位的,再加上換行,因為生成一個密碼就要換一行,並且生成密碼應該是一個字串型別。

password = str(id).zfill(6) + '\n'

然後通過f.write方法把password寫入到檔案當中

f.write(password)

寫進去之後要去關閉當前的檔案流

f.close()

然後我們來嘗試去生成一下,看看能不能成功。

import zipfile

f = open('password.txt','w')
for id in range(1000000)
    password = str(id).zfill(6) + '\n'
    f.write(password)
f.close()

可以看到這裡給我們生成了一個possword.txt密碼字典,它是一個密碼庫。


000000一直到999999它已經全部生成出來了。



這就是一個簡單的密碼字典生成方式,如果要去生成一個比較複雜的密碼肯定不會這麼簡單,給你們看個一個複雜的,這裡我就不演示了,看看就可以了,將近寫了一萬多行。


所以你們自己想要去生成的話,還得專門好好學一下。



搞定六位數數字密碼字典後我們需要完成解決壓縮檔案密碼的函式

首先我們先來宣告一個函式 ,取個名字叫file,然後加入兩個行參。
第一個是我的壓縮檔案zipfile,第二個是當前需要傳入的密碼password

def pwd_file(zipfile,password):

傳完行參後寫上一個異常處理,呼叫zipfile,它裡面會有一個方法extractall傳入兩個值,第一個是pwd傳入位元組,在位元組裡傳入行參,編碼集是utf8

tey:
    zipfile.extractall(pwd=bytes(password, 'utf8'))

然後print壓縮包密碼,列印password

print('壓縮包密碼:', password)

因為密碼庫裡面密碼比較多,只有一個正確的,其它的都是錯誤的,所以肯定會報錯,所以我們要寫一個異常處理,寫上一個pass就可以了,報錯了就給它pass掉。

except:
    pass

這就是一個簡單的函式,我們通過zipfile它裡面的一個extractall方法去智慧的獲取正確密碼,它是可以自動匹配密碼的。

所以說Python牛逼,很多東西都不需要我們去寫,直接呼叫就好了。


然後我們來寫上執行函式

先寫上一個main函式

def main():

main函式裡面,通過zipfile方法把加密的壓縮檔案代入到程式碼中。

zipFlie = zipfile.ZipFile('./獲取檔案密碼.zip')

通過pwd生成一個list變數,開啟生成的密碼檔案。

pwd_list = open('./password.txt')

然後我們需要一個一個去試密碼,這個是一行一行的去讀。

for line in pwd_list.readlines():

讀到一個就把它寫進去,拿到一個密碼刪除一個換行符。

pwd = line.strip('\n')

通過pwd_file呼叫之前寫的函式,傳zipFliepwd

pwd_file(zipFlie, pwd)

最後寫入函式入口,寫上一個main,為什麼要寫這個函式入口呢?不寫也可以執行的。

因為它是用來去做測試的。

if __name__是一個測試入口,什麼意思呢?

比如我在當前檔案下匯入了其它檔案庫,但是我又不想用,我就可以通過if讓它不去執行,所以可寫可不寫,當一個延伸。

if __name__ == '__main__':
    main()

全部程式碼

import zipfile


f = open('password.txt', 'w')
for id in range(1000000):
    password = str(id).zfill(6) + '\n'
    f.write(password)
f.close()


def pwd_file(zipFlie, password):
    try:
        zipFlie.extractall(pwd=bytes(password, 'utf8'))
        print('壓縮包密碼:', password)
    except:
        pass


def main():
    zipFlie = zipfile.ZipFile('./獲取檔案密碼.zip')
    pwd_list = open('./password.txt')
    for line in pwd_list.readlines():
        pwd = line.strip('\n')
        pwd_file(zipFlie, pwd)


if __name__ == '__main__':
    main()
#視訊放在評論區

我們看看效果,可以看到壓縮包的密碼已經打印出來了。

如果你要獲取的密碼越複雜,你的電腦越好就計算的越快。

兄弟們,學廢了嗎?

原創不易,點個贊支援一下哇~