创建受密码保护的zip文件Python

时间:2017-11-29 07:51:40

标签: python django python-3.x zipfile

我使用以下代码在我的Python34应用程序中使用zipFile从用户上传的文件创建受密码保护的zip文件。但是,当我从Windows打开zip文件时,它不会要求输入密码。我将使用相同的密码稍后从python中读取zip文件。我做错了什么?

这是我的代码:

pwdZipFilePath = uploadFilePath + "encryptedZipFiles/"
filePath = uploadFilePath

if not os.path.exists(pwdZipFilePath):        
      os.makedirs(pwdZipFilePath)

#save csv file to a path
fd, filePath = tempfile.mkstemp(suffix=source.name, dir=filePath)

with open(filePath, 'wb') as dest:
    shutil.copyfileobj(source, dest)

#convert that csv to zip
fd, pwdZipFilePath = tempfile.mkstemp(suffix=source.name + ".zip", dir=pwdZipFilePath)

with zipfile.ZipFile(pwdZipFilePath, 'w') as myzip:
    myzip.write(filePath)

    myzip.setpassword(b"tipi")

2 个答案:

答案 0 :(得分:5)

documentation for zipfile表示ZipFile.setpassword设置"默认密码以提取加密文件。"

在文档的最顶层:"它支持ZIP存档中加密文件的解密,但它目前无法创建加密文件。"

编辑: 要创建受密码保护的ZIP文件,请尝试使用pyminizip等包。

答案 1 :(得分:4)

内置zipfile模块不支持编写密码加密文件(仅读取)。您可以使用pyminizip

import pyminizip
pyminizip.compress("dummy.txt", "myzip.zip", "noneshallpass", compression_level)

或者,如果您使用的是Windows / msysgit,并且对该格式不可知:

import os
os.system('tar cz dummy.txt | openssl enc -aes-256-cbc -e -k noneshallpass > mypacked.enc')
os.remove('dummy.txt')
os.system('openssl enc -aes-256-cbc -d -k noneshallpass -in mypacked.enc | tar xz')