代码之家  ›  专栏  ›  技术社区  ›  PabloG

用Python创建加密的ZIP文件

  •  31
  • PabloG  · 技术社区  · 18 年前

    我正在用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,但我想肯定有一种更“python”的方式。我在寻找一个开源的解决方案。

    4 回复  |  直到 9 年前
        1
  •  22
  •   Shin Aoyama    13 年前

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

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

    图书馆需要zlib。

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

        2
  •  6
  •   tripleee    7 年前

    重复的问题 https://stackoverflow.com/a/2366917/874188 7z 而不是 zip . 我的经验证明了这一点。

    为了完整起见,请将@JFSebastian的答案复制/粘贴在此处:

    创建加密的zip存档(命名为 'myarchive.zip' 7-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 在提示下。

    >>> zipfile.ZipFile('myarchive.zip').extractall(pwd='P4$$W0rd')
    
        3
  •  3
  •   Smack Alpha    7 年前

    pyminizip 非常适合创建受密码保护的zip文件。对于unziping来说,它在某些情况下会失败。在python3.7.3上测试

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

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

    from zipfile import ZipFile
    
    with ZipFile('/home/paulsteven/dst.zip') as zf:
        zf.extractall(pwd=b'password')
    
        4
  •  0
  •   Maher Abuthraa    9 年前

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

    这段代码适合我在Windows8.1上的Python3.5.2上使用( 7z型 路径已添加到系统)。

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

    有两个参数:

    1. -mx9 表示最大压缩
    2. -pSecret^) 表示密码是 Secret^) . ^ 是为了 ) 对于Windows操作系统,但当您解压缩时,需要在 ^ .

    没有 ^ 当7z.exe创建 拉链 文件。

    如果你想用 -mhe 开关,你需要文件格式 而不是 拉链 .

    我希望这会有所帮助。

        5
  •  -1
  •   Kijewski Jim    13 年前

    你可以使用 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()