Обзор
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 предоставляет комплексные функциональные возможности для оптимизации вашего рабочего процесса и повышения производительности.
Support and Learning Resources
- Образовательные ресурсы
- Документация
- Исходный код
- Ссылки на API
- Поддержка продукта
- Бесплатная поддержка
- Платная поддержка
- Блог
- Примечания к выпуску
- Почему Aspose.Zip для Python.Net?
- Список клиентов
- Истории успеха