Сведения о вопросе

LiKIY

00:32, 27th August, 2020

Теги

python   zip    

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

Просмотров: 537   Ответов: 4

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



  Сведения об ответе

VCe znayu

13:53, 14th August, 2020

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

import pyminizip

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

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

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


  Сведения об ответе

PAGE

08:05, 10th August, 2020

Повторяющийся вопрос 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')


  Сведения об ответе

padenie

08:36, 13th August, 2020

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


  Сведения об ответе

PROGA

23:56, 9th August, 2020

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

Этот код работает для меня на 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 OS, но когда вы распакуете его, вам нужно будет ввести ^ .

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться