簡體   English   中英

用密碼解壓縮zip文件失敗 - Python中的錯誤?

[英]Decompress zip file with password fails - bug in Python?

我在python中遇到一個奇怪的錯誤。 當我嘗試使用zip模塊提取受密碼保護的文件時,在嘗試將“oy”設置為密碼時出現異常。 其他一切似乎都有效。 ZipFile模塊中的錯誤?

import zipfile    
zip = zipfile.ZipFile("file.zip", "r")
zip.setpassword("oy".encode('utf-8'))
zip.extractall() #Above password "oy" generates the error here
zip.close()

這是我得到的例外:

Traceback (most recent call last):
  File "unzip.py", line 4, in <module>
    zip.extractall()
  File "C:\Program Files\Python32\lib\zipfile.py", line 1002, in extrac
l
    self.extract(zipinfo, path, pwd)
  File "C:\Program Files\Python32\lib\zipfile.py", line 990, in extract
    return self._extract_member(member, path, pwd)
  File "C:\Program Files\Python32\lib\zipfile.py", line 1035, in _extra
member
    shutil.copyfileobj(source, target)
  File "C:\Program Files\Python32\lib\shutil.py", line 65, in copyfileo
    buf = fsrc.read(length)
  File "C:\Program Files\Python32\lib\zipfile.py", line 581, in read
    data = self.read1(n - len(buf))
  File "C:\Program Files\Python32\lib\zipfile.py", line 633, in read1
    max(n - len_readbuffer, self.MIN_READ_SIZE)
zlib.error: Error -3 while decompressing: invalid block type

如果我使用UTF-16作為編碼我得到這個錯誤:

zlib.error: Error -3 while decompressing: invalid distance too far back

編輯我現在已在具有以下內容的虛擬Linux機器上進行了測試:

  • Python版本:2.6.5
  • 我用zip -e file.zip hello.txt創建了一個受密碼保護的zip文件

現在看來問題是別的。 現在即使密碼錯誤,我也可以解壓縮zip文件!

try:
    zip.setpassword("ks")  # "ks" is wrong password but it still extracts the zip
    zip.extractall()
except RuntimeException:
    print "wrong!"

有時我可以用不正確的密碼解壓縮zip文件。 然后提取文件(在zip文件中),但是當我嘗試打開它時,信息似乎被破壞/解密。

如果密碼有問題,通常會出現以下異常:

RuntimeError: ('Bad password for file', <zipfile.ZipInfo object at 0xb76dec2c>)

由於您的異常抱怨塊類型,很可能您的.zip存檔已損壞,您是否嘗試使用獨立的解壓縮實用程序解壓縮它?

或者你可能已經使用了一些有趣的東西,比如7zip來創建它,這會產生不兼容的.zip檔案。


您沒有提供足夠的信息(操作系統版本?Python版本?ZIP存檔創建者和內容?這些存檔中有多個文件或單個存檔中的單個文件?所有這些文件是否都有相同的錯誤,或者您可以解壓其中一些? ),所以這里是快速問答部分,它可以幫助您找到並解決問題。

Q1。 這是Python中的錯誤嗎?

A1。 不太可能。

Q2。 什么可能導致這種行為?

A2。 破損的拉鏈文件,不兼容的拉鏈壓縮機 - 因為你什么都不說,所以很難指出確切的原因。

Q3。 如何找到原因?

A3。 嘗試隔離問題,找到導致錯誤的文件,嘗試使用zip.testzip()和/或使用不同的解壓縮實用程序解壓縮該特定文件,共享結果。 只有您可以訪問有問題的文件,因此除非您嘗試自己做某事,否則沒有人可以幫助您

Q4。 如何解決這個問題?

A4。 你不能。 使用不同的zip提取器, ZipFile將無法正常工作。

在提取文件之前,請嘗試使用testzip()方法檢查文件的完整性。

它可能是zipfile中的錯誤,或者是zip實現中的錯誤。 我注意到你的行號與我的不匹配,所以我想這比我現有的3.2.3版本早的python 3.2。

現在,至於你的代碼,它在Linux上的Python 3.2.3上對我有用。 我建議你更新到最新的3.2.x,因為似乎有一些與zipfile和zlib相關的bug修復,包括崩潰的修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM