文件加密时的Python ZipFile模块问题

问题描述

我有以下简短程序

from zipfile import ZipFile
procfile1 ="C:\\Temp\\XLFile-Demo.zip"
procfile2 ="C:\\Temp2\\XLFile-Demo-PW123.zip"

# Unencrypted file
print ("Unencrypted file")
myzip1 = ZipFile(procfile1)
print (myzip1.infolist())
myzip1.extractall("C:\\Temp")

# Encrypted File
print ("Encrypted file")
myzip2 = ZipFile(procfile2)
print (myzip2.infolist())
myzip2.setpassword(bytes('123','utf-8'))
myzip2.extractall("C:\\Temp2")enter code here

这两个文件Amazon Drive link。它们相同,除了一个邮政编码受密码 123 保护。

执行上述代码会成功提取未加密的代码,但会引发错误 NotImplementedError:另一种代码不支持该压缩方法

Unencrypted file
[<ZipInfo filename='XLFile-Demo.xlsx' compress_type=deflate external_attr=0x20 file_size=31964 compress_size=29252>]

Encrypted file
[<ZipInfo filename='XLFile-Demo.xlsx' compress_type=99 external_attr=0x20 file_size=31964 compress_size=29280>]

我到底有做错什么吗?

解决方法

使用WinRar的ZIP选项压缩文件时出现错误。我安装了7Zip,并且可以正常工作。

7Zip文件的.infolist如下:

UNION ALL

WinRar可以偶然处理此文件,而7Zip可以正确处理WinRar创建的加密Zip存档。