博主在上篇博文https://www.cnblogs.com/kangbazi666/p/13646308.html介紹了《Python實作加密的RAR檔案解壓(密碼已知)》后,又嘗試了ZIP檔案的解壓方法,下面開始分享,
當ZIP檔案的壓縮密碼已知時,可以通過呼叫zipfile庫進行解壓:
1 import zipfile
2 zip_file = zipfile.ZipFile(r'C:\test.zip') # 檔案的路徑與檔案名
3 zip_list = zip_file.namelist() # 得到壓縮包里所有檔案
4 for f in zip_list:
5 zip_file.extract(f, r'C:\Test', pwd="123".encode("utf-8")) # 回圈解壓檔案到指定目錄
6 zip_file.close() # 關閉檔案,必須有,釋放記憶體
當壓縮包非加密時,只需修改上面第5行代碼:
zip_file.extract(f, r'C:\Test') # 回圈解壓檔案到指定目錄
但是博主在進行測驗的時候,發現了一個問題,呼叫zipfile對傳統加密的zip檔案進行解壓可以成功,但是當zip為非傳統加密方式時無法解壓,這里的傳統加密指的什么呢?大家使用版本比較新的WinRAR進行zip加密壓縮的時候,下面會有一個“ZIP傳統加密'的選項:

當博主不勾選這個選項生成壓縮包進行解壓測驗的時候,發現無法解壓:

后查詢資料并咨詢前輩,得出如下解釋:
默認情況下,WinRAR在CTR模式下使用AES-256加密ZIP檔案,而傳統加密是通過CRC32加密,也即ZIP 2.0傳統加密演算法,雖然AES-256比ZIP 2.0傳統加密演算法安全得多,但它可能與一些舊的解壓軟體不兼容,而Python標準庫中的zipfile模塊只支持CRC32加密的zip檔案,所以不采用傳統加密方式是無法通過zipfile庫進行解壓的,
后來博主了解到,Python有個pyzipper庫可以很好的兼容代替zipfile,可以讀寫AES加密的zip檔案,目前博主還沒有進行嘗試,有興趣的小伙伴可以去了解一下:https://www.cnpython.com/pypi/pyzipper
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/37672.html
標籤:Python
上一篇:輸入5個人的成績,存盤在陣列中,計算并輸出其中的最高分最低分和平均分
下一篇:C++ 頭檔案中定義類A,并宣告APrivate. 然后在相應的源檔案中對APrivate進行定義,請問有什么意義?
