使用Python创建加密的ZIP文件

时间:2008-08-20 00:16:40

标签: python zip

我在Python 2.5中使用ZipFile创建一个ZIP文件,到目前为止它可以正常工作:

import zipfile, os

locfile = "test.txt"
loczip = os.path.splitext (locfile)[0] + ".zip"
zip = zipfile.ZipFile (loczip, "w")
zip.write (locfile)
zip.close()

但我找不到如何加密ZIP文件中的文件。 我可以使用系统并调用PKZIP -s,但我想必须有更“Pythonic”的方式。我正在寻找一个开源解决方案。

6 个答案:

答案 0 :(得分:16)

我创建了一个简单的库来在python中创建一个密码加密的zip文件。 - here

import pyminizip

compression_level = 5 # 1-9
pyminizip.compress("src.txt", "dst.zip", "password", compression_level)

图书馆需要zlib。

我已经检查过可以在WINDOWS / MAC中提取文件。

答案 1 :(得分:6)

重复的问题https://stackoverflow.com/a/2366917/874188建议使用7z代替zip。我的经历证明了这一点。

复制/粘贴@JFSebastian的答案也是为了完整性:

使用开源7-Zip实用程序创建加密的zip存档(名为'myarchive.zip'):

rc = subprocess.call(['7z', 'a', '-mem=AES256', '-pP4$$W0rd', '-y', 'myarchive.zip'] + 
                     ['first_file.txt', 'second.file'])

要安装7-Zip,请输入:

$ sudo apt-get install p7zip-full

要手动解压缩(以演示与zip实用程序的兼容性),请键入:

$ unzip myarchive.zip

并在提示符下输入P4$$W0rd

或者在Python 2.6 +中也是如此:

>>> zipfile.ZipFile('myarchive.zip').extractall(pwd='P4$$W0rd')

答案 2 :(得分:1)

这个帖子有点老了,但对于在 2020/2021 年寻找这个问题答案的人来说。

pyzipper

<块引用>

Python zipfile 的 100% API 兼容替代品,可以读写 AES 加密的 zip 文件。

7-zip 也是一个不错的选择,但是如果不想用 subprocess,就用 pyzipper...

答案 3 :(得分:0)

您可以使用Chilkat库。这是商业广告,但有免费评估,看起来很不错。

以下是我从here获得的一个例子:

import chilkat

# Demonstrates how to create a WinZip-compatible 128-bit AES strong encrypted zip
zip = chilkat.CkZip()
zip.UnlockComponent("anything for 30-day trial")

zip.NewZip("strongEncrypted.zip")

# Set the Encryption property = 4, which indicates WinZip compatible AES encryption.
zip.put_Encryption(4)
# The key length can be 128, 192, or 256.
zip.put_EncryptKeyLength(128)
zip.SetPassword("secret")

zip.AppendFiles("exampleData/*",True)
zip.WriteZip()

答案 4 :(得分:0)

pyminizip非常适合创建受密码保护的zip文件。对于解压缩,在某些情况下会失败。在python 3.7.3上测试

在这里,我使用pyminizip对该文件进行加密。

import pyminizip
compression_level = 5 # 1-9
pyminizip.compress("src.txt",'src', "dst.zip", "password", compression_level)

对于解压缩,我使用了zip文件模块:

from zipfile import ZipFile

with ZipFile('/home/paulsteven/dst.zip') as zf:
    zf.extractall(pwd=b'password')

答案 5 :(得分:-1)

@ tripleee的回答帮助了我,请看下面的测试。

此代码适用于Windows 8.1上的python 3.5.2( 7z 路径添加到系统中)。

rc = subprocess.call(['7z', 'a', output_filename + '.zip', '-mx9', '-pSecret^)'] + [src_folder + '/'])

有两个参数:

  1. -mx9表示最大压缩
  2. -pSecret^)表示密码为Secret^)。对于Windows操作系统,^)的转义,但是当您解压缩时,它需要输入^
  3. 没有^当7z.exe创建 zip 文件时,Windows操作系统将不会应用密码。

    此外,如果您想使用-mhe切换,则需要将文件格式设置为 7z ,而不是 zip

    我希望这可能会有所帮助。