python暴力破解壓縮包密碼
簡介
簡介:
ZIP文件格式是一種數(shù)據(jù)壓縮和文檔儲存的文件格式,原名Deflate,發(fā)明者為菲爾·卡茨(Phil Katz),他于1989年1月公布了該格式的資料。ZIP通常使用后綴名“.zip”,它的MIME格式為application/zip。當(dāng)前,ZIP格式屬于幾種主流的壓縮格式之一,其競爭者包括RAR格式以及開放源碼的7z格式。從性能上比較,RAR及7z格式較ZIP格式壓縮率較高,而7-Zip由于提供了免費(fèi)的壓縮工具而逐漸在更多的領(lǐng)域得到應(yīng)用。Microsoft從Windows ME操作系統(tǒng)開始內(nèi)置對zip格式的支持,即使用戶的計(jì)算機(jī)上沒有安裝解壓縮軟件,也能打開和制作zip格式的壓縮文件,OS X和流行的Linux操作系統(tǒng)也對zip格式提供了類似的支持。因此如果在網(wǎng)絡(luò)上傳播和分發(fā)文件,zip格式往往是最常用的選擇。
ZIP是一種相當(dāng)簡單的分別壓縮每個(gè)文件的存檔格式。分別壓縮文件允許不必讀取另外的數(shù)據(jù)而檢索獨(dú)立的文件;理論上,這種格式允許對不同的文件使用不同的算法。不管用何種方法,對這種格式的一個(gè)告誡是對于包含很多小文件的時(shí)候,存檔會明顯的比壓縮成一個(gè)獨(dú)立的文件(在類Unix系統(tǒng)中一個(gè)經(jīng)典的例子是普通的tar.gz存檔是由一個(gè)使用gzip壓縮的TAR存檔組成)要大。
編碼講解
準(zhǔn)備工作
首先是需要創(chuàng)建一個(gè).zip后綴名的壓縮包,然后給這個(gè)zip壓縮包設(shè)置一個(gè)密碼。
注意這里要點(diǎn)擊ZIP傳統(tǒng)加密。
把這個(gè)文件放入到pycharm里面。
開始編碼
- 首先是獲取文件后綴名
from zipfile import ZipFile
import os
def passwd(path):
# 獲取文件的后綴名
suffix_name = os.path.splitext(path)[-1][1:]
print(suffix_name)
if __name__ == '__main__':
passwd("D:\系統(tǒng)默認(rèn)\桌面\python數(shù)據(jù)分析\python爬蟲\zip\二叉樹.zip")
運(yùn)行結(jié)果:
- 沒有密碼的解壓方法
from zipfile import ZipFile
import os
def passwd(path):
# 獲取文件的后綴名
suffix_name = os.path.splitext(path)[-1][1:]
# print(suffix_name)
# 如果是zip文件
if suffix_name == 'zip':
# 開始讀zip文件
with ZipFile(path, 'r') as zip:
# 解壓到指定文件目錄下
zip.extractall("D:\系統(tǒng)默認(rèn)\桌面\python數(shù)據(jù)分析\python爬蟲\\target")
if __name__ == '__main__':
passwd("D:\系統(tǒng)默認(rèn)\桌面\python數(shù)據(jù)分析\python爬蟲\zip\二叉樹.zip")
運(yùn)行結(jié)果:
對于沒有密碼的解壓,我們寫到這一步就可以了,如果設(shè)置了有密碼,然后了我們就會發(fā)現(xiàn),這個(gè)會報(bào)錯(cuò)。
- 編寫枚舉密碼的函數(shù)
如果學(xué)過算法的就知道了,這個(gè)就是算法里面的,那個(gè)排列組合題,在java和c++里面,需要自己去寫,而且這個(gè)時(shí)間復(fù)雜度還很高,在python立面別人已經(jīng)幫忙做好了這個(gè)功能。
def create_pwd(words):
# 通過導(dǎo)入這包來設(shè)置枚舉序列
import itertools as its
# 設(shè)置基礎(chǔ)需要枚舉的字符集
# 這個(gè)base的意思就是把words集合的字符取repeat次組合
# 打印出來
base = its.product(words, repeat=2)
for i in base:
print(''.join(i))
運(yùn)行結(jié)果
- 用暴力破解來破解程序
其實(shí)我們學(xué)過算法就知道,其實(shí)只要稍微密碼長度長一點(diǎn),基本上就不能夠被破解了,除非需要涉及到哈希字典,這個(gè)我們以后再討論,現(xiàn)在就只討論暴力破解的寫法。
完整代碼
from zipfile import ZipFile
import os
def passwd(path, pwd):
# 獲取文件的后綴名
suffix_name = os.path.splitext(path)[-1][1:]
# print(suffix_name)
# 如果是zip文件
if suffix_name == 'zip':
# 開始讀zip文件
with ZipFile(path, 'r') as zip:
# print("當(dāng)前嘗試的密碼是:%s"%(pwd))
# 解壓到指定文件目錄下
try:
# print(pwd.encode('utf-8'))
zip.extractall("D:\系統(tǒng)默認(rèn)\桌面\python數(shù)據(jù)分析\python爬蟲\\target", pwd=pwd.encode('utf-8'))
print("解壓成功,密碼是:%s"%(pwd))
return True
except Exception as e: # 添加一個(gè)異常處理
pass
def create_pwd(words):
# 通過導(dǎo)入這包來設(shè)置枚舉序列
import itertools as its
# 設(shè)置基礎(chǔ)需要枚舉的字符集
# 這個(gè)base的意思就是把words集合的字符取repeat次組合
# 打印出來
base = its.product(words, repeat=6)
# 一般需要把這個(gè)打印函數(shù)注釋 因?yàn)檫@個(gè)函數(shù)運(yùn)行很消耗時(shí)間的
for i in base:
# print(''.join(i))
yield ''.join(i) # 把這個(gè)函數(shù)制作成一個(gè)迭代器
if __name__ == '__main__':
words = '123456789'
dir = 'D:\系統(tǒng)默認(rèn)\桌面\python數(shù)據(jù)分析\python爬蟲\zip\二叉樹.zip'
for p in create_pwd(words):
flag = passwd(dir, p)
if flag == True:
break
運(yùn)行結(jié)果:
這個(gè)結(jié)果的命名很奇怪,但是問題不大只要可以解壓,后面會講解一下,比較難的解壓方法,涉及到算法。文章來源:http://www.zghlxwxcb.cn/news/detail-778377.html
如果大家覺得有用的話,可以關(guān)注我下面的微信公眾號,極客李華,我會在里面更新更多行業(yè)資訊,企業(yè)面試內(nèi)容,編程資源,如何寫出可以讓大廠面試官眼前一亮的簡歷,讓大家更好學(xué)習(xí)編程,我的抖音,B站也叫極客李華。文章來源地址http://www.zghlxwxcb.cn/news/detail-778377.html
到了這里,關(guān)于python暴力破解壓縮包密碼(python暴力破解zip壓縮包)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!