使用Python创建加密的ZIP文件

Pab*_*loG 32 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()
Run Code Online (Sandbox Code Playgroud)

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

Shi*_*ama 17

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

import pyminizip

compression_level = 5 # 1-9
pyminizip.compress("src.txt", "dst.zip", "password", compression_level)
Run Code Online (Sandbox Code Playgroud)

该库需要zlib.

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

  • 它可以通过pip install pyminizip获得 (3认同)

小智 9

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

\n

看看pyzipper

\n
\n

Python\xe2\x80\x99s zipfile 的 100% API 兼容替代品,可以读取和写入 AES 加密的 zip 文件。

\n
\n

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

\n


tri*_*eee 6

重复的问题/sf/answers/165684221/建议使用7z而不是zip.我的经历证明了这一点.

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

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

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

要安装7-Zip,请键入:

$ sudo apt-get install p7zip-full
Run Code Online (Sandbox Code Playgroud)

要手动解压缩(以证明与zip utitity的兼容性),请键入:

$ unzip myarchive.zip
Run Code Online (Sandbox Code Playgroud)

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

或者在Python 2.6+中相同:

>>> zipfile.ZipFile('myarchive.zip').extractall(pwd='P4$$W0rd')
Run Code Online (Sandbox Code Playgroud)


Sma*_*pha 5

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

在这里,我使用 pyminizip 来加密文件。

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

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

from zipfile import ZipFile

with ZipFile('/home/paulsteven/dst.zip') as zf:
    zf.extractall(pwd=b'password')
Run Code Online (Sandbox Code Playgroud)


Har*_*mbe -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()
Run Code Online (Sandbox Code Playgroud)