Обзор
Aspose.ZIP облегчает ряд операций, связанных с шифрованием и расшифровкой архивов. Используя API Aspose.Zip для Java, вы можете быстро шифровать и расшифровывать архивы ZIP, RAR, 7-Zip.Шифрование/дешифрование ZIP-файлов
Для ZIP-архивов доступно два метода шифрования: традиционный метод, который сейчас считается слабым, и современный метод AES. Стандарт ZIP позволяет шифровать любую запись любым методом, даже в одном ZIP-архиве. Шифрование AES обеспечивает более высокий уровень безопасности и доступно с ключами различной длины (128-бит, 192-бит и 256-бит). Это обеспечивает лучшую защиту конфиденциальных данных, хранящихся в ZIP-архивах.
Зашифруйте ZIP с помощью метода Deflate
try (FileOutputStream zipFile = new FileOutputStream("archive.zip")) {
try (FileInputStream source = new FileInputStream("alice29.txt")) {
Archive archive = new Archive(new ArchiveEntrySettings(CompressionSettings.getDeflate(), new TraditionalEncryptionSettings("p@s$S")));
archive.createEntry("alice29.txt", source);
archive.save(zipFile);
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
Этот код создает ZIP-архив с именем «archive.zip», используя метод сжатия Deflate и традиционное ZIP-шифрование. Это достигается путем открытия нового выходного потока для архива с помощью команды try FileOutputStream. Источник FileInputStream служит входным потоком для исходного файла «alice29.txt», который будет добавлен в архив. Затем создается объект Archive, в котором указывается как метод сжатия Deflate, так и традиционное шифрование. Пароль для шифрования установлен «p@s$S». Оператор catch обрабатывает любые исключения, которые могут возникнуть во время операций с файлами или архивами, выводя сообщение об ошибке на консоль.
Шифрование ZIP методом AES
try (FileOutputStream zipFile = new FileOutputStream("archive.zip")) {
try (FileInputStream source = new FileInputStream("alice29.txt")) {
try (Archive archive = new Archive(new ArchiveEntrySettings(CompressionSettings.getDeflate(), new AesEncryptionSettings("p@s$S", EncryptionMethod.AES256)))) {
archive.createEntry("alice29.txt", source);
archive.save(zipFile);
}
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
Этот код создает ZIP-архив с именем «archive.zip», используя метод сжатия Deflate, и шифрует данные с помощью надежного алгоритма AES-256.
Для этих примеров мы предоставили экземпляры
EncryptionSetting
в соответствующем
конструкторе архива
. Можно применить шифрование для определенной записи, оставив другие незащищенными.
Используя алгоритм шифрования ZIP, зашифруйте вторую запись из трех
try (FileOutputStream zipFile = new FileOutputStream("archive.zip")) {
File source1 = new File("alice29.txt");
File source2 = new File("asyoulik.txt");
File source3 = new File("fields.c");
try (Archive archive = new Archive()) {
archive.createEntry("alice29.txt", source1);
archive.createEntry("asyoulik.txt", source2, false, new ArchiveEntrySettings(null, new AesEncryptionSettings("p@s$S", EncryptionMethod.AES256)));
archive.createEntry("fields.c", source3);
archive.save(zipFile);
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
Этот код демонстрирует создание ZIP-архива с тремя входными файлами: «alice29.txt», «asyoulik.txt» и «fields.c». Уникально то, что первый и последний файлы добавляются в незашифрованном виде, а второй файл, «asyoulik.txt», защищен паролем с использованием шифрования AES-256 с паролем «p@s$S».
Этот подход выборочного шифрования. файлы в ZIP-архиве встречаются редко. Однако API Aspose.Zip для Java предоставляет возможность шифрования определенных записей в ZIP-архиве с использованием различных методов шифрования и паролей. Хоть это и повышает безопасность данных, но усложняет процесс управления архивом и его расшифровки.
Зашифруйте ZIP разными методами и паролями.
try (FileOutputStream zipFile = new FileOutputStream("archive.zip")) {
File source1 = new File("alice29.txt");
File source2 = new File("asyoulik.txt");
File source3 = new File("fields.c");
try (Archive archive = new Archive()) {
archive.createEntry("alice29.txt", source1, false, new ArchiveEntrySettings(null, new AesEncryptionSettings("p@s$S", EncryptionMethod.AES256)));
archive.createEntry("asyoulik.txt", source2, false, new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$D")));
archive.createEntry("fields.c", source3, false, new ArchiveEntrySettings(null, new AesEncryptionSettings("p@s$F", EncryptionMethod.AES256)));
archive.save(zipFile);
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
Этот код создает ZIP-архив, содержащий три зашифрованных файла: «alice29.txt», «asyoulik.txt» и «fields.c». Каждый файл шифруется отдельным методом.
Первая часть отражает функциональность предыдущего примера кода. Основной раздел посвящен созданию записей в архиве для каждого файла. Эти записи ссылаются на свои имена и исходные файлы (объекты File). Шифрование применяется различными методами:
- "alice29.txt": шифрование AES-256 с паролем "p@s$S"
- "asyoulik.txt": традиционное. метод шифрования с паролем "p@s$D"
- "fields.c" : шифрование AES-256 с паролем "p@s$F"
Зашифровать существующий ZIP-архив
try (Archive archive = new Archive("plain.zip")) {
ArchiveSaveOptions options = new ArchiveSaveOptions();
options.setEncryptionOptions(new AesEncryptionSettings("p@s$S", EncryptionMethod.AES256));
archive.save("encrypted.zip", options);
}
Этот код берет существующий архив «plain.zip», применяет к нему шифрование AES с паролем «p@s$S» и сохраняет его как новый архив с именем «encrypted.zip».
Расшифровать ZIP-файл с помощью пароля
try (Archive archive = new Archive("source.zip")) {
archive.getEntries().get(0).extract("first_entry.bin", "p@s$S");
}
Этот код извлекает первую запись из архива «source.zip» и сохраняет ее как файл с именем «first_entry.bin» с использованием пароля «p@s$S».
Пользователь имеет возможность расшифровать либо конкретную запись в зашифрованном ZIP-архиве, либо весь архив целиком.
Расшифровать весь ZIP-файл
ArchiveLoadOptions options = new ArchiveLoadOptions();
options.setDecryptionPassword("p@s$S");
try (Archive archive = new Archive("source.zip", options)) {
archive.extractToDirectory("destination");
}
В этом случае нам нужно указать пароль в конструкторе.
Зашифровать/дешифровать файл RAR с помощью Java
Aspose.ZIP не предоставляет возможности создания
архивов RAR
; он поддерживает исключительно извлечение. Архив RAR можно зашифровать с возможностью защиты имен файлов или нет.
В первом сценарии пользователь должен указать пароль для расшифровки в объекте
RarArchiveLoadOptions
при инициализации RAR-архив. В последнем случае пароль может быть предоставлен во время извлечения отдельных записей.
Расшифровать файл RAR с зашифрованными именами файлов
RarArchiveLoadOptions options = new RarArchiveLoadOptions();
options.setDecryptionPassword("p@s$S");
try (RarArchive archive = new RarArchive("source.rar", options)) {
archive.extractToDirectory("destination");
}
Этот код расшифровывает и извлекает содержимое архива «source.rar» в папку «назначение». Если архив зашифрован, он использует указанный пароль расшифровки.
Вот описание того, как это работает:
- Загрузка настроек с паролем расшифровки: сначала создается объект настроек загрузки для Архив RAR с помощью оператора параметров RarArchiveLoadOptions. Затем он устанавливает пароль для расшифровки архива с помощью метода options.setDecryptionPassword.
- Открыть зашифрованный архив: следующая строка открывает архив «source.rar» для чтения и редактирования с помощью попробовать с ресурсами. Он указывает объект параметров с паролем расшифровки для обработки зашифрованных архивов.
- Извлечь содержимое архива: Наконец, метод archive.extractToDirectory извлекает содержимое расшифрованного архива в «пункт назначения». папка.
Целевое дешифрование RAR-файла
try (RarArchive archive = new RarArchive("source.rar")) {
archive.getEntries().get(0).extract("first_entry.bin", "p@s$S");
}
Этот фрагмент кода пытается извлечь первую запись из архива RAR «source.rar» и сохранить ее как «first_entry.bin», используя пароль расшифровки «p@s$S», если архив зашифрован.
Расшифровка определенного содержимого записи RAR (поток)
ByteArrayOutputStream destination = new ByteArrayOutputStream();
try (RarArchive archive = new RarArchive("source.rar")) {
try (InputStream source = archive.getEntries().get(1).open("p@s$S")) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = source.read(buffer, 0, buffer.length)) > 0) {
destination.write(buffer, 0, bytesRead);
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
}
Этот фрагмент кода предназначен для определенной записи в архиве RAR. Он расшифровывает содержимое записи и передает его непосредственно в память, при условии, что зашифрованы только данные записи, а не сами имена файлов.
Полное описание того, что делает код:
- Инициализация буфера памяти : создается именованный пункт назначения ByteArrayOutputStream, который служит буфером в памяти для хранения расшифрованного содержимого целевой записи.
- Доступ к архиву и записи: код использует попытку с Блок -resources, чтобы открыть исходный RAR-архив «source.rar». Внутри другого блока try-with-resources он получает входной поток для второй записи и расшифровывает его с помощью пароля «p@s$S».
- Дешифрование и потоковая передача: расшифрованные байты считываются из входного потока порциями с использованием буфера. Каждый фрагмент затем записывается в целевой поток ByteArrayOutputStream, пока все данные не будут обработаны.
- Обработка ошибок: код включает блок catch для обработки любые потенциальные исключения IOException, которые могут возникнуть в процессе расшифровки или потоковой передачи. В случае возникновения ошибки сообщение об ошибке выводится в стандартный поток ошибок для целей отладки.
Зашифруйте и дешифруйте файл 7-ZIP с помощью Java
Будет реализован в Aspose.ZIP для версии Java 24.4. Единственный вариант шифрования архива 7z — AES.
Зашифруйте и сжимайте файл 7-Zip с помощью LZMA2.
using (FileStream szFile = File.Open("archive.7z", FileMode.Create))
{
FileInfo source1 = new FileInfo("alice29.txt");
FileInfo source2 = new FileInfo("asyoulik.txt");
FileInfo source3 = new FileInfo("fields.c");
using (var archive = new SevenZipArchive(new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("p@s$S"))))
{
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik.txt", source2);
archive.CreateEntry("fields.c", source3);
archive.Save(szFile);
}
}
Архивы 7Z поддерживают возможность зашифровать каждую запись собственным паролем или оставить незащищенной. Этот код создает новый архив 7z со сжатием и шифрованием LZMA2 и AES.
- Открытие файла: FileStream используется для открытия нового файла с именем «archive.7z» в режиме создания.
- Инициализация объектов: для файлов «alice29.txt», «asyoulik.txt» и «fields.c» создаются три объекта FileInfo.
- Создание файла 7-zip: Объект SevenZipArchive создается с использованием:
- LZMA2 настроек сжатия.
- Настройки AES-шифрования с использованием пароля "p@s$S" - Добавление файлов: Методы CreateEntry используются для добавления каждого файла в архив из отдельного источник.
- Сохранение архива: Архив сохраняется в файловом потоке szFile с использованием метода Save.
Выборочное шифрование в архиве 7z
using (FileStream szFile = File.Open("archive.7z", FileMode.Create))
{
FileInfo source1 = new FileInfo("alice29.txt");
FileInfo source2 = new FileInfo("asyoulik.txt");
FileInfo source3 = new FileInfo("fields.c");
using (var archive = new SevenZipArchive())
{
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik.txt", source2, false, new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("p@s$S")));
archive.CreateEntry("fields.c", source3, false, new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("$ecret")));
archive.Save(szFile);
}
}
Этот код создает архив 7z, содержащий три файла: «alice29.txt», «asyoulik.txt» и «fields.c». Последние два файла сжимаются и шифруются с использованием разных паролей.
В отличие от предыдущего кода, метод archive.CreateEntry используется в объекте архива для создания записей для каждого файла. При создании записи для «asyoulik.txt» из объекта source2 FileInfo третьему параметру CreateEntry присваивается значение false. Это указывает на то, что будут использоваться пользовательские настройки сжатия и шифрования, определенные в четвертом параметре (объект SevenZipEntrySettings). В данном случае в настройках указано сжатие «Zip LZMA2» и шифрование «Zip AES» с паролем «p@s$S».
Подобно ZIP, пользователь может расшифровать либо весь архив, либо определенную запись в нем.
Архив 7Z
может быть зашифрован с защитой или без нее. имена файлов. Если имена файлов зашифрованы, вам необходимо указать пароль
при создании экземпляра архива
.
Расшифровка 7z с зашифрованными именами файлов
try (SevenZipArchive archive = new SevenZipArchive("archive.7z", "p@s$S")) {
archive.extractToDirectory("C:\\extracted");
}
В этом коде используется блок try-with-resources для открытия архива 7z с именем «archive.7z», защищенного паролем «p@s$S». Затем он извлекает содержимое архива в папку «C:\extracted».
Независимо от того, зашифрованы имена файлов или нет, можно безопасно указать пароль в конструкторе извлечения. Приведенный ниже пример будет работать только в том случае, если защищен только контент.
Расшифровка конкретной записи 7z
try (SevenZipArchive archive = new SevenZipArchive("archive.7z")) {
archive.getEntries().get(0).extract("data.bin", "p@s$S");
}
В этом коде используется блок try-with-resources для открытия архива 7z с именем «archive.7z», защищенного паролем «p@s$S». Затем он извлекает содержимое архива в папку «C:\extracted».
Независимо от того, зашифрованы имена файлов или нет, можно безопасно указать пароль в конструкторе извлечения. Приведенный ниже пример будет работать только в том случае, если защищен только контент.
Другие поддерживаемые API сжатия Java
Используйте Java-библиотеку Aspose.ZIP для конвертации, объединения, редактирования zip-документов, извлечения данных из архивов и многого другого!
Support and Learning Resources
- Learning Resources
- Documentation
- Source Code
- API References
- Tutorial Videos
- Product Support
- Free Support
- Paid Support
- Blog
- Release Notes
- Why Aspose.ZIP for Java?
- Customers List
- Success Stories