您首先需要确定 zip 文件使用的加密类型。WinZip 本身可能有一个报告工具会告诉您。我没有,所以不知道。
如果您可以访问任何命令行 zip 实用程序,您可以很容易地找到它。
首先,如果您有可用的 Infozip 实现,请使用该选项unzip
运行它。-lv
如果您有一个非常新的unzip
可用版本并且它显示AES_WG
在“方法”列中,则您的文件是 AES 加密的。
$ unzip -lv my.zip
Archive: /home/paul/perl/ext/Gzip/IO-Zippo/scratch/sample-zip/7z/7z-win32-aes128.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
1933 AES_WG 884 54% 04-15-2010 22:26 00000000 0001-perl-74088.patch
-------- ------- --- -------
1933 884 54% 1 file
如果您unzip
年龄较大,则Unk:099
“方法”列中存在该字符串意味着您的文件是 AES 加密的。
$ unzip -lv my.zip
Archive: IO-Zippo/scratch/sample-zip/7z/7z-win32-aes128.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
1933 Unk:099 884 54% 2010-04-15 22:26 00000000 0001-perl-74088.patch
-------- ------- --- -------
1933 884 54% 1 file
另一种选择是使用zipdetails(完全公开,我是 zipdetails 的作者)。寻找的关键是线Compression Method 0063 'AES Encryption'
$ zipdetails my.zip
0000 LOCAL HEADER #1 04034B50
0004 Extract Zip Spec 33 '5.1'
0005 Extract OS 00 'MS-DOS'
0006 General Purpose Flag 0001
[Bit 0] 1 'Encryption'
0008 Compression Method 0063 'AES Encryption'
...
如果事实证明您确实有 AES 加密并且您需要一种 python 方式来读取文件,那么标准zipfile
方法将不起作用。目前zipfile
只支持弱加密。
有关读取 AES 加密的 Zip 文件的其他 python 方法,请参阅Python unzip AES-128 encrypted file