我在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”的方式。我正在寻找一个开源解决方案。
答案 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 年寻找这个问题答案的人来说。
<块引用>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)
此代码适用于Windows 8.1上的python 3.5.2( 7z 路径添加到系统中)。
rc = subprocess.call(['7z', 'a', output_filename + '.zip', '-mx9', '-pSecret^)'] + [src_folder + '/'])
有两个参数:
-mx9
表示最大压缩-pSecret^)
表示密码为Secret^)
。对于Windows操作系统,^
是)
的转义,但是当您解压缩时,它需要输入^
。没有^
当7z.exe创建 zip 文件时,Windows操作系统将不会应用密码。
此外,如果您想使用-mhe
切换,则需要将文件格式设置为 7z ,而不是 zip 。
我希望这可能会有所帮助。