我有一个用例,我需要删除电子邮件中附加的受密码保护的 zip 文件的解密,并将其替换为未加密的相同 zip 文件。到目前为止我所拥有的:
import zipfile
import StringIO
...
if part.get_content_type() == "application/zip":
encrypted_string = part.get_payload().decode("base64")
encrypted_zip = zipfile.ZipFile(StringIO(encrypted_string))
encrypted_zip.setpassword("password")
我知道 zip 文件现在已解密,因为我可以执行 encrypted_zip.namelist()
并且它可以工作。现在我在 var crypto_zip 中有常规 zip,我只想对其进行 Base64 编码并替换当前附件的有效负载,然后继续处理下一个附件。但是,ZipFile 没有“.to_string()”方法,我可以用它来重新编码它。
我该如何实现这一目标?
最佳答案
您可以创建一个临时存档来删除密码:
import zipfile
import StringIO
path = "dev.zip"
encrypted_zip = zipfile.ZipFile( path )
encrypted_zip.setpassword("pass")
print encrypted_zip.namelist()
with zipfile.ZipFile('spam.zip', 'w') as myzip:
for nested_file in encrypted_zip.namelist():
myzip.write(encrypted_zip.read(nested_file))
该脚本将受密码保护的存档“dev.zip”的文件复制到未加密的存档“spam.zip”中。 (之后不要忘记销毁存档)。
关于python - 如何使用 Python 从 zip 文件中去除密码加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13858169/