Вопрос:

Создать зашифрованный ZIP-файл в Python

python zip

24225 просмотра

4 ответа

19570 Репутация автора

Я создаю 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" способ. Я ищу решение с открытым исходным кодом.

Автор: PabloG Источник Размещён: 20.08.2008 12:16

Ответы (4)


0 плюса

118582 Репутация автора

Вы можете использовать библиотеку 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()
Автор: Harley Holcombe Размещён: 20.08.2008 01:20

16 плюса

332 Репутация автора

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

import pyminizip

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

Библиотека требует zlib.

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

Автор: Shin Aoyama Размещён: 17.04.2013 01:39

6 плюса

98095 Репутация автора

Повторяющийся вопрос 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в подсказку.

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

>>> zipfile.ZipFile('myarchive.zip').extractall(pwd='P4$$W0rd')
Автор: tripleee Размещён: 12.12.2014 12:27

-1 плюса

51 Репутация автора

Ответ @ 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 .

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

Автор: zqcolor Размещён: 20.10.2016 09:18
Вопросы из категории :
32x32