<p>首先需要确定zip文件使用的加密类型。WinZip本身可能有一个报告工具可以告诉您。我没有,所以不知道</p>
<p>如果您可以访问任何命令行zip实用程序,您可以很容易地找到它们</p>
<p>首先,如果有可用的<code>unzip</code>的Infozip实现,请使用<code>-lv</code>选项运行它。如果您有一个非常新版本的<code>unzip</code>可用,并且它在方法列中显示<code>AES_WG</code>,那么您的文件是AES加密的</p>
<pre><code>$ 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
</code></pre>
<p>如果<code>unzip</code>较旧,则Method列中的字符串<code>Unk:099</code>表示您的文件是AES加密的</p>
<pre><code>$ 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
</code></pre>
<p>另一种选择是使用<a href="https://github.com/pmqs/IO-Compress/blob/master/bin/zipdetails" rel="nofollow noreferrer">zipdetails</a>(完全公开,我是zipdetails的作者)。要查找的关键内容是行<code>Compression Method 0063 'AES Encryption'</code></p>
<pre><code>$ 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'
...
</code></pre>
<p>如果您确实有AES加密,并且需要python方式读取文件,那么标准的<code>zipfile</code>方法将无法工作。目前<code>zipfile</code>只支持弱加密</p>
<p>有关读取AES加密Zip文件的其他python方法,请参见<a href="https://stackoverflow.com/questions/15553150/python-unzip-aes-128-encrypted-file">Python unzip AES-128 encrypted file</a></p>