前幾天在一本書上看到一篇可以利用字典破解zip文件密碼的文章,覺得比較有意思於是研究了一番,在這裡分享一下
很多人學習python,不知道從何學起。
很多人學習python,掌握了基本語法過後,不知道在哪裡尋找案例上手。
很多已經做案例的人,卻不知道如何去學習更加高深的知識。
那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視頻教程,電子書籍,以及課程的原始碼!
QQ群:101677771
原理主要是利用python裡自帶的zipfile庫中的extractall函數來實現的,簡單導入zipfile之後,實例化一個ZipFile類。利用extractall()來解壓這個文件,並在參數pwd上填入正確密碼
這時我們發現執行腳本之後,fate.zip會被正確解壓,而填入錯誤密碼則會入下圖一樣報錯
因此我們可以利用因口令不正確而拋出的異常來測試字典文件中是否有zip文件的密碼,並利用try expect來處理異常信息。
假定zip文件密碼為fate,pwd.txt為字典文件
import zipfile
zFile = zipfile.ZipFile(r"D:\python\fate.zip")
passFile = open(r"D:\python\pwd.txt")
for line in passFile.readlines():
password = line.strip('\n')
# noinspection PyBroadException
try:
zFile.extractall(pwd=password.encode("utf=8"))
print("password="+password)
except Exception as e:
pass需要注意的是python3以及不支持自動ascii碼了,在extractall的pwd參數後需手動添加編碼類型,# noinspection PyBroadException則是為了防止PyCharm報錯
提高性能將程序模塊化後,在利用多線程處理可以提高程序性能,可以利用Thread來實現多線程處理
import zipfile
from threading import Thread
def extractfile(zFile,password):
# noinspection PyBroadException
try:
zFile.extractall(pwd=password.encode("utf=8"))
print("password="+password)
except Exception as e:
pass
def main():
zFile = zipfile.ZipFile(r"D:\python\fate.zip")
passFile = open(r"D:\python\pwd.txt")
for line in passFile.readlines():
password = line.strip('\n')
t = Thread(target=extractfile(zFile , password))
t.start()
if __name__ == "__main__":
main()利用if __name__ == "__main__"使函數只在當前模塊運行,當被導入時不運行