Создать зашифрованный ZIP-файл в Python - PullRequest
32 голосов
/ 20 августа 2008

Я создаю ZIP-файл с ZipFile в Python 2.5, пока он работает нормально:

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 и вызывать PKZIP -s, но я предполагаю, что должен быть более "Pythonic" способ Я ищу решение с открытым исходным кодом.

Ответы [ 4 ]

16 голосов
/ 17 апреля 2013

Я создал простую библиотеку для создания зашифрованного паролем zip-файла на python. - здесь

import pyminizip

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

Для библиотеки требуется zlib.

Я проверил, что файл можно извлечь в WINDOWS / MAC.

6 голосов
/ 12 декабря 2014

Повторяющийся вопрос https://stackoverflow.com/a/2366917/874188 рекомендует использовать 7z вместо zip. Мой опыт подтверждает это.

Скопируйте / вставьте ответ @JFSebastian здесь также для полноты:

Чтобы создать зашифрованный zip-архив (с именем 'myarchive.zip'), используя open-source 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 в командной строке.

Или то же самое в Python 2.6 +:

>>> zipfile.ZipFile('myarchive.zip').extractall(pwd='P4$$W0rd')
0 голосов
/ 21 октября 2016

@ ответ tripleee помог мне, см. Мой тест ниже.

Этот код работает для меня на python 3.5.2 в Windows 8.1 ( 7z путь добавлен в систему).

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

С двумя параметрами:

  1. -mx9 означает максимальное сжатие
  2. -pSecret^) означает, что пароль Secret^). ^ - это escape для ) для ОС Windows, но когда вы разархивируете, ему нужно будет ввести ^.

Без ^ ОС Windows не будет применять пароль, когда 7z.exe создает файл zip .

Кроме того, если вы хотите использовать переключатель -mhe, вам потребуется формат файла 7z вместо zip .

Надеюсь, это может помочь.

0 голосов
/ 20 августа 2008

Вы можете использовать библиотеку 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()
...