python - 无法在 Python 中提取加密的 Zip 文件
问题描述
我无法使用 Python 提取受密码保护的 zip 文件。这是我使用的片段:
import os
import subprocess
import zipfile
import sys
# Step 1: Encrypt the file using AES256
rc = subprocess.call(['/usr/local/Cellar/p7zip/16.02_1/bin/7z', 'a', '-mem=AES256', '-pP4$$W0rd', '-y', 'myarchive.zip'] +
['/Users/joe/Projects/Sandbox/python-projects/aaa.txt', '/Users/joe/Projects/Sandbox/python-projects/bbb.txt'])
# Step 2: Decrypt the archive
f = zipfile.ZipFile('myarchive.zip').extractall(pwd='P4$$W0rd')
这是错误消息。可以看出,我可以使用密码成功加密和压缩文件,但是当我尝试使用相同的密码提取它时,它失败了!很奇怪!
Joes-MacBook-Pro:python-projects joe$ python ./test.py
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,8 CPUs x64)
Scanning the drive:
2 files, 245 bytes (1 KiB)
Creating archive: myarchive.zip
Items to compress: 2
Files read from disk: 2
Archive size: 534 bytes (1 KiB)
Everything is Ok
Traceback (most recent call last):
File "./test.py", line 15, in <module>
f = zipfile.ZipFile('myarchive.zip').extractall(pwd='P4$$W0rd')
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 1040, in extractall
self.extract(zipinfo, path, pwd)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 1028, in extract
return self._extract_member(member, path, pwd)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 1082, in _extract_member
with self.open(member, pwd=pwd) as source, \
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 1007, in open
raise RuntimeError("Bad password for file", name)
RuntimeError: ('Bad password for file', <zipfile.ZipInfo object at 0x106354438>)
Joes-MacBook-Pro:python-projects joe$
为什么是这样?有什么我做错了吗?
解决方案
我想出了如何做到这一点!
subprocess.call(["/usr/local/Cellar/p7zip/16.02_1/bin/7z", "x", '-p{}'.format(passwd), "myarchive.zip"])
似乎 AES 加密和 Python ZipFile 存在错误!
推荐阅读
- html - 如何通过 Swift 从 macOS 的网页中获取文本?
- visual-studio-code - vscode:一种语言的多个扩展
- sql-server - 以 CTE 为中心描述
- android - UnityPlayerActivity 不加载纸板
- python - 递归到 NLTK 脚本的迭代变换
- lda - Adam' 对象没有属性 'zero_grads'
- c# - 在 MVC 中,在 POST 期间,如何遍历模型状态中的模型对象列表?
- c - 用户退出时如何关闭控制台窗口?
- c++ - 有什么东西可以阻止 std::optional::value_or() 有条件地为 noexcept 吗?
- python - 在我的基于数组的列表实现中为 append 方法编写单元测试