Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何打开WinZip密码保护的存档?_Python_Encryption_Password Protection_Zipfile_Winzip - Fatal编程技术网

Python 如何打开WinZip密码保护的存档?

Python 如何打开WinZip密码保护的存档?,python,encryption,password-protection,zipfile,winzip,Python,Encryption,Password Protection,Zipfile,Winzip,我知道解密是一个广阔的世界,我是这方面的新手,但我有一个WinZip文件,我可以通过WinZip UI轻松地用已知密码在WinZip中打开 但是,由于提供了相同的密码,我无法在Python中打开它。我怀疑编码可能在AES中,但我不想使用非本机库来打开文件。是否有任何标准可以在Python中打开受密码保护的WinZip文件?我在ZipFile中尝试了不同的编码解码器 from zipfile import ZipFile with ZipFile(r'C:\Users\user\Desktop\

我知道解密是一个广阔的世界,我是这方面的新手,但我有一个WinZip文件,我可以通过WinZip UI轻松地用已知密码在WinZip中打开

但是,由于提供了相同的密码,我无法在Python中打开它。我怀疑编码可能在AES中,但我不想使用非本机库来打开文件。是否有任何标准可以在Python中打开受密码保护的WinZip文件?我在ZipFile中尝试了不同的编码解码器

from zipfile import ZipFile

with ZipFile(r'C:\Users\user\Desktop\Data.zip') as zf:
    pas = 'myPass'
    res = pas.encode('utf-32-le')
    zf.extractall(pwd=res)
zf
运行时错误:文件的密码错误。。。

正常传递密码而不进行编码可能会起作用。

首先需要确定zip文件使用的加密类型。WinZip本身可能有一个报告工具可以告诉您。我没有,所以不知道

如果您可以访问任何命令行zip实用程序,您可以很容易地找到它们

首先,如果您有
unzip
的Infozip实现,请使用
-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 -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
如果
unzip
较旧,则方法列中出现的字符串
Unk:099
表示您的文件已加密

$ 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 -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的作者)。要查找的关键内容是行
压缩方法0063“AES加密”

$ 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方法,请参见

“编码”和“加密”是两种不同的东西。AES是加密的。pyzipper工作正常,谢谢!现在我不能使用read_csv,我必须弄清楚如何从内存中读取以制表符分隔的文件内容。我会尝试一下你的拉链细节,以作比较。