41

我正在使用ZipFilePython 2.5 创建一个 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 文件中的文件。我可以使用 system 和 call PKZIP -s,但我想必须有一种更“Pythonic”的方式。我正在寻找一个开源解决方案。

4

7 回答 7

25

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

import pyminizip

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

该库需要 zlib。

我检查了该文件是否可以在 WINDOWS/MAC 中提取。

于 2013-04-17T01:39:00.683 回答
8

重复的问题:创建密码加密 zip 文件的代码?有一个建议使用而不是的答案。我的经验证明了这一点。7zzip

为了完整起见,@jfs 也在这里复制/粘贴答案:

'myarchive.zip'要使用开源7-Zip实用程序创建加密的 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')
于 2014-12-12T12:27:59.550 回答
4

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

看看pyzipper

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

7-zip 也是不错的选择,不过如果你不想用subprocess,​​就用 pyzipper...

于 2021-02-11T16:27:22.170 回答
3

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')
于 2019-08-08T04:47:15.830 回答
1

您可以使用 pyzipper 完成此任务,当您想要加密 zip 文件或生成受保护的 zip 文件时,它会非常有用。

点安装 pyzipper

import pyzipper

def encrypt_():

    secret_password = b'your password'

    with pyzipper.AESZipFile('new_test.zip',
                             'w',
                             compression=pyzipper.ZIP_LZMA,
                             encryption=pyzipper.WZ_AES) as zf:
        zf.setpassword(secret_password)
        zf.writestr('test.txt', "What ever you do, don't tell anyone!")

    with pyzipper.AESZipFile('new_test.zip') as zf:
        zf.setpassword(secret_password)
        my_secrets = zf.read('test.txt')

AES 加密的强度可以配置为 128、192 或 256 位。默认为 256 位。使用 setencryption() 方法指定加密 kwargs:

def encrypt_():
    
    secret_password = b'your password'

    with pyzipper.AESZipFile('new_test.zip',
                             'w',
                             compression=pyzipper.ZIP_LZMA) as zf:
        zf.setpassword(secret_password)
        zf.setencryption(pyzipper.WZ_AES, nbits=128)
        zf.writestr('test.txt', "What ever you do, don't tell anyone!")

    with pyzipper.AESZipFile('new_test.zip') as zf:
        zf.setpassword(secret_password)
        my_secrets = zf.read('test.txt')

官方 Python ZipFile 文档可在此处获得:https ://docs.python.org/3/library/zipfile.html

于 2021-12-17T06:57:57.620 回答
0

@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 操作系统的转义,但是当你解压缩时,它需要输入^.

如果没有Windows 操作系统,7z.exe 创建zip文件^时将不会应用密码。

此外,如果您想使用-mheswitch,则需要文件格式为7z而不是zip

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

于 2016-10-20T21:18:51.647 回答
-1

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

这是我从这里得到的一个例子:

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()
于 2008-08-20T01:20:48.180 回答