Обзор

Aspose.ZIP упрощает ряд операций шифрования и дешифрования архивов. Используя API Aspose.Zip для Python.NET, вы можете эффективно шифровать и расшифровывать архивы ZIP, RAR и 7-Zip.

Шифровать ZIP-файлы

Для ZIP-архивов можно использовать два метода шифрования: более старый, который сейчас считается менее безопасным традиционным методом, и более надежное современное шифрование AES. Стандарт ZIP допускает шифрование отдельных записей в одном архиве любым методом. Шифрование AES, известное своей более высокой степенью безопасности, поддерживает ключи различной длины, в том числе 128-битные, 192-битные и 256-битные, обеспечивая улучшенную защиту конфиденциальных данных в ZIP-архивах. Каждая запись в одном архиве может быть зашифрована собственным шифрованием, поэтому в одном архиве можно использовать разные типы шифрования.

Разблокировать ZIP методом Deflate

    with open("archive.zip", 'x') as zip_file:
        with open("alice29.txt") as source:
            method =  zp.saving.CompressionSettings.deflate
            encryption = zp.saving.TraditionalEncryptionSettings("p@s$S")
            archive = zp.Archive(zp.saving.ArchiveEntrySettings(method, encryption))
            archive.create_entry("alice29.txt", source)
            archive.save(zip_file)

Код создает новый ZIP-файл с именем archive.zip, сжимает содержимое alice29.txt с использованием метода сжатия Deflate, шифрует его традиционным методом шифрования ZIP с использованием пароля «p@s$S» и сохраняет сжатый и зашифрованный файл. файл во вновь созданный ZIP-архив.

Зашифровать ZIP с помощью AES

    with open("archive.zip", 'x') as zip_file:
        with open("alice29.txt") as source:
            method =  zp.saving.CompressionSettings.deflate
            encryption = zp.saving.AesEcryptionSettings("p@s$S", zp.saving.EncryptionMethod.AES256)
            archive = zp.Archive(zp.saving.ArchiveEntrySettings(method, encryption))
            archive.create_entry("alice29.txt", source)
            archive.save(zip_file)

Приведенный код демонстрирует, как создать ZIP-архив с именем archive.zip, сжать файл alice29.txt с помощью метода сжатия Deflate и зашифровать его с помощью шифрования AES-256 с использованием пароля «p@s$S». Для этих примеров мы предоставили экземпляры EncryptionSetting в соответствующем конструкторе архива . Можно применить шифрование для определенной записи, оставив другие незащищенными.
Это демонстрирует гибкость применения шифрования к определенным записям в ZIP-архиве, что позволяет различным файлам иметь разные уровни защиты. Такой подход позволяет реализовать более детализированную и настраиваемую стратегию безопасности, при которой отдельные файлы или группы файлов могут иметь разные уровни защиты. Однако важно отметить, что эта практика может усложнить процесс управления и дешифрования, а совместимость с различными инструментами ZIP-архивирования может различаться.

Зашифровать ZIP вторую запись из трех

    with open("archive.zip", 'x') as zip_file:
        encrypted_entry = zp.saving.ArchiveEntrySettings(None, zp.saving.AesEcryptionSettings("p@s$", zp.saving.EncryptionMethod.AES256))
        with zp.Archive as archive:
            archive.create_entry("alice29.txt", "alice29.txt")
            archive.create_entry("asyoulik.txt", "asyoulik.txt", false, encrypted_entry)
            archive.create_entry("fields.c", "fields.c")
            archive.save(zip_file)

Этот код демонстрирует создание ZIP-архива, защищенного паролем, в Python. Он добавляет три файла: alice29.txt, asyoulik.txt и field.c.
Вот как это работает:
Открывает или создает файл для ZIP-архива на основе имени, хранящегося в this.resultFile. Создает объекты FileInfo для представления добавляемых файлов. Создает новый объект архива.
Добавляет файлы: alice29.txt и field.c добавляются в архив без каких-либо специальных настроек. asyoulik.txt добавляется с шифрованием AES-256, для расшифровки которого требуется пароль p@s$. Сохраняет готовый архив в указанный файл.

Зашифруйте ZIP разными методами и паролями.

    with open("archive.zip", 'x') as zip_file:
        encrypted_1 = zp.saving.ArchiveEntrySettings(None, zp.saving.AesEcryptionSettings("p@s$1", zp.saving.EncryptionMethod.AES256))
        encrypted_2 = zp.saving.ArchiveEntrySettings(None, zp.saving.TraditionalEncryptionSettings("p@s$2"))
        encrypted_3 = zp.saving.ArchiveEntrySettings(None, zp.saving.AesEcryptionSettings("p@s$3", zp.saving.EncryptionMethod.AES128))
        with zp.Archive as archive:
            archive.create_entry("alice29.txt", "alice29.txt", false, encrypted_1)
            archive.create_entry ("asyoulik.txt", "asyoulik.txt", false, encrypted_2)
            archive.create_entry("fields.c", "fields.c", false, encrypted_3)
            archive.save(zip_file)

В этом фрагменте кода показано создание ZIP-архива на Python, в котором отдельные файлы шифруются различными методами и паролями. Вот как это работает:
Настройка файла: Открывает или создает файл для ZIP-архива на основе имени, хранящегося в this.resultFile. Создает объекты FileInfo, представляющие добавляемые файлы: alice29.txt, asyoulik.txt и field.c.
Создание архива: Создает новый объект архива (архив).
Добавление зашифрованных файлов: Код использует цикл для перебора файлов и добавления их в архив с определенными настройками шифрования:
alice29.txt - Этот файл добавляется с помощью ** Шифрование AES-256**, для расшифровки требуется пароль «p@s».
asyoulik.txt — этот файл добавлен с использованием другого метода шифрования, называемого Традиционное шифрование. Для расшифровки он также использует отдельный пароль «p@s».
fields.c - Этот файл снова добавляется с шифрованием AES-128, но с другим паролем “p@s$3” для расшифровки.
Сохранение архива: Наконец, код сохраняет готовый архив, содержащий зашифрованные файлы, в указанный файл.

Зашифруйте ZIP-архив разными методами и паролями.

    with zp.Archive("plain.zip") as archive:
        save_options = zp.saving.ArchiveSaveOptions()
        save_options.encryption_options = zp.saving.AesEcryptionSettings("p@s$", zp.saving.EncryptionMethod.AES256)
        archive.save("encrypted.zip",  save_options)

Этот код берет существующий ZIP-архив plain.zip, шифрует его содержимое с помощью AES-256 с паролем p@s$ и сохраняет зашифрованную версию как новый архив с именем encrypted.zip.

Расшифровать ZIP-файлы

Расшифровать ZIP-файл с помощью пароля

    with zp.Archive("source.zip") as archive:
        archive.entries[0].extract("first_entry.bin", "p@s$")

Пользователь имеет возможность расшифровать любую конкретную запись в зашифрованном ZIP-архиве. Этот фрагмент кода демонстрирует базовый подход к расшифровке первой записи из ZIP-архива, защищенного паролем. Если пароль правильный, архив открывается успешно.

Расшифровать весь ZIP-файл

    load_options = zp.ArchiveLoadOptions()
    load_options.decryption_password = "p@s$S"
    with zp.Archive("source.zip", load_options) as archive:
        archive.extract_to_directory("destination")

Этот простой код берет защищенный паролем ZIP-архив «source.zip», использует предоставленный пароль «p@s$S» для расшифровки и извлекает все его содержимое в назначенную папку «назначение».

Расшифровать RAR-файл

Aspose.ZIP не поддерживает композицию архива RAR, он поддерживает только извлечение. Архив RAR может быть зашифрован с защитой имен файлов или без нее.
В первом случае пользователю необходимо предоставить пароль для расшифровки в RarArchiveLoadOptions в самом начале создания экземпляра архива RAR. В последнем случае можно передать пароль позже при извлечении записи.

Расшифровать весь архив RAR с зашифрованными именами файлов

    load_options = zp.rar.RarArchiveLoadOptions()
    load_options.decryption_password = "p@s$S"
    with zp.rar.RarArchive("source.rar", load_options) as archive:
        archive.extract_to_directory("destination")

По сути, этот код работает аналогично примеру ZIP, но работает специально для архивов RAR. Он берет защищенный паролем RAR-архив «source.rar», использует предоставленный пароль «p@s$S» для расшифровки и извлекает все его содержимое в назначенную папку «назначение».

Расшифровать конкретную запись из архива RAR

    with zp.rar.RarArchive("source.rar") as archive:
        archive.entries[0].extract("first_entry.bin", "p@s$S")

Этот код открывает RAR-архив source.rar, расшифровывает и извлекает первую запись архива с использованием пароля «p@s$S» и сохраняет ее в файле first_entry.bin. Этот пример будет работать, если зашифровано только содержимое записей, а имена файлов — нет.

Расшифровать конкретную запись из архива RAR как поток.

    with io.FileIO("file.bin", "xb") as destination:
        with zp.rar.RarArchive("source.rar") as archive:
            with archive.entries[0].open("p@s$S") as source:
                destination.write(source.readall())

Этот код открывает архив RAR source.rar, расшифровывает вторую запись архива с помощью пароля «p@s$S» и считывает ее содержимое в ByteArrayOutputStream. Используя буфер чтения, код обеспечивает постепенную передачу данных, что помогает эффективно обрабатывать большие файлы. Этот пример будет работать, если зашифровано только содержимое записей, а имена файлов — нет. В этом примере байты записи копируются в поток памяти.

7zip шифрование с AES 256

Единственный вариант шифрования архива 7z — AES . В архиве используется сжатие LZMA2 для эффективного уменьшения размера файла и шифрование AES с паролем для дополнительной безопасности. Код перебирает файлы и добавляет их в архив с помощью метода CreateEntry.

Зашифровать и сжать весь архив 7zip

    with open("archive.7z", 'xb') as sz_file:
        compression = zp.saving.SevenZipLZMA2CompressionSettings()
        encryption = zp.saving.SevenZipAESEncryptionSettings("p@s$S")
        entry_settings = zp.saving.SevenZipEntrySettings(compression, encryption) 
        with zp.sevenzip.SevenZipArchive(entry_settings) as archive:
            archive.create_entry("alice29.txt", "alice29.txt")
            archive.create_entry("asyoulik.txt", "asyoulik.txt")
            archive.create_entry("fields.c", "fields.c")
            archive.save(sz_file)

Этот код создает зашифрованный архив 7z, содержащий три файла: alice29.txt, asyoulik.txt и field.c. В архиве используется сжатие LZMA2 и шифрование AES с паролем «p@s$S». Файлы добавляются в архив с помощью метода CreateEntry, а сам архив сохраняется в созданный файл archive.7z.

7z Шифрование с паролем

    with open("archive.7z", 'xb') as sz_file:
        compression = zp.saving.SevenZipLZMA2CompressionSettings()
        entry_pass1 = zp.saving.SevenZipEntrySettings(compression, zp.saving.SevenZipAESEncryptionSettings("p@s$S"))
        entry_pass2 = zp.saving.SevenZipEntrySettings(compression, zp.saving.SevenZipAESEncryptionSettings("$ecret"))
        with zp.sevenzip.SevenZipArchive(entry_settings) as archive:
            archive.create_entry("alice29.txt", "alice29.txt")
            archive.create_entry("asyoulik.txt", "asyoulik.txt", false, entry_pass1)
            archive.create_entry("fields.c", "fields.c", false, entry_pass2)
            archive.save(sz_file)

Этот код создает зашифрованный архив 7z, содержащий три файла: alice29.txt, asyoulik.txt и field.c. Первый файл добавляется в архив без особых настроек. Второй файл прикрепляется с использованием сжатия LZMA2 и шифрования AES с паролем «p@s$S». Третий файл прикрепляется с использованием сжатия LZMA2 и шифрования AES с паролем «$ecret». Наконец, архив сохраняется в файл archive.7z.
Как и в случае с ZIP, пользователь может расшифровать как весь архив, так и отдельную запись из него. Архив 7Z можно зашифровать с защитой имен файлов или без нее. Если имена файлов зашифрованы, вам необходимо указать пароль для создания архива .

Расшифровать файлы 7ZIP

Расшифровать архив 7z с зашифрованными именами файлов

    with zp.sevenzip.SevenZipArchive("archive.7z", "p@s$S") as archive: 
        archive.extract_to_directory("c:\extracted")

Независимо от того, зашифрованы имена файлов или нет, можно безопасно указать пароль в конструкторе извлечения. Приведенный ниже пример будет работать только в том случае, если защищен только контент.

Расшифровать конкретную запись 7zip

with zp.sevenzip.SevenZipArchive("archive.7z") as archive:
    archive.entries[0].extract("data.bin", "p@s$S")

Независимо от того, зашифрованы имена файлов или нет, можно безопасно указать пароль в конструкторе извлечения. Приведенный ниже пример будет работать только в том случае, если защищен только контент.

Другие поддерживаемые функции API Aspose.ZIP для Python.Net

С помощью библиотеки Aspose.ZIP в Python.Net вы можете легко решать различные задачи, связанные с документами в формате ZIP. Если вам нужно конвертировать форматы, объединять файлы, редактировать содержимое или извлекать данные, Aspose.ZIP предоставляет комплексные функциональные возможности для оптимизации вашего рабочего процесса и повышения производительности.

  
  

Aspose.Zip offers individual archive processing APIs for other popular development environments, listed below: