Przegląd
Aspose.ZIP umożliwia szereg operacji związanych z szyfrowaniem i deszyfrowaniem archiwów. Używając Aspose.Zip API dla Java, możesz szybko szyfrować i deszyfrować archiwa ZIP, RAR, 7-Zip.Szyfruj/odszyfruj pliki ZIP
Istnieją dwie metody szyfrowania archiwów ZIP : metoda tradycyjna, obecnie uważana za słabą, oraz nowoczesna metoda AES. Standard ZIP umożliwia szyfrowanie dowolnego wpisu dowolną metodą, nawet w tym samym archiwum ZIP. Szyfrowanie AES zapewnia większe bezpieczeństwo i jest dostępne w różnych długościach kluczy (128-bitowy, 192-bitowy i 256-bitowy). Zapewnia to lepszą ochronę wrażliwych danych przechowywanych w archiwach ZIP.
Zaszyfruj plik ZIP metodą 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());
}
Ten kod tworzy archiwum ZIP o nazwie „archive.zip” przy użyciu metody kompresji Deflate i tradycyjnego szyfrowania ZIP. Osiąga to, otwierając najpierw nowy strumień wyjściowy archiwum za pomocą try FileOutputStream. Źródło FileInputStream służy jako strumień wejściowy dla pliku źródłowego „alice29.txt”, który zostanie dodany do archiwum. Następnie tworzony jest obiekt Archive, określający zarówno metodę kompresji Deflate, jak i tradycyjne szyfrowanie. Hasło do szyfrowania jest ustawione na „p@s$S”. Instrukcja catch obsługuje wszelkie wyjątki, które mogą pojawić się podczas operacji na plikach lub archiwach, wyświetlając komunikat o błędzie na konsoli.
Szyfrowanie ZIP metodą 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());
}
Ten kod tworzy archiwum ZIP o nazwie „archive.zip” przy użyciu metody kompresji Deflate i szyfruje dane silnym algorytmem AES-256.
Dla tych przykładów udostępniliśmy instancje
EncryptionSetting
w odpowiednim
konstruktorze archiwum
. Możliwe jest zastosowanie szyfrowania dla poszczególnych wpisów, pozostawiając inne bez ochrony.
Używając algorytmu szyfrowania ZIP, zaszyfruj drugi wpis z trzech
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());
}
Ten kod demonstruje tworzenie archiwum ZIP z trzema plikami wejściowymi: „alice29.txt”, „asyoulik.txt” i „fields.c”. Wyjątkowo pierwszy i ostatni plik są dodawane niezaszyfrowane, podczas gdy drugi plik „asyoulik.txt” jest chroniony hasłem przy użyciu szyfrowania AES-256 z hasłem „p@s$S”.
To podejście polegające na selektywnym szyfrowaniu plików w archiwum ZIP jest rzadkością. Jednakże interfejs API Aspose.Zip dla języka Java zapewnia funkcję szyfrowania określonych wpisów w archiwum ZIP przy użyciu różnych metod szyfrowania i haseł. Zwiększa to wprawdzie bezpieczeństwo danych, ale komplikuje proces zarządzania archiwami i deszyfrowania
Szyfruj ZIP różnymi metodami i hasłami
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());
}
Ten kod tworzy archiwum ZIP zawierające trzy zaszyfrowane pliki: „alice29.txt”, „asyoulik.txt” i „fields.c”. Każdy plik jest szyfrowany inną metodą.
Pierwsza część odzwierciedla funkcjonalność poprzedniego przykładowego kodu. Sekcja podstawowa koncentruje się na tworzeniu wpisów w archiwum dla każdego pliku. Wpisy te odwołują się do swoich nazw i plików źródłowych (obiektów plików). Szyfrowanie odbywa się różnymi metodami:
- "alice29.txt": szyfrowanie AES-256 z hasłem "p@s$S"
- "asyoulik.txt": tradycyjne metoda szyfrowania hasłem „p@s$F”
- „fields.c” : Szyfrowanie AES-256 hasłem „p@s$F”
Zaszyfruj istniejące archiwum 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);
}
Ten kod pobiera istniejące archiwum „plain.zip”, stosuje do niego szyfrowanie AES za pomocą hasła „p@s$S” i zapisuje je jako nowe archiwum o nazwie „encrypted.zip”
Odszyfruj plik ZIP za pomocą hasła
try (Archive archive = new Archive("source.zip")) {
archive.getEntries().get(0).extract("first_entry.bin", "p@s$S");
}
Ten kod wyodrębnia pierwszy wpis z archiwum „source.zip” i zapisuje go jako plik o nazwie „first_entry.bin” przy użyciu hasła „p@s$S”.
Użytkownik ma możliwość odszyfrowania określonego wpisu w zaszyfrowanym archiwum ZIP lub całego archiwum jako całości.
Odszyfruj cały plik ZIP
ArchiveLoadOptions options = new ArchiveLoadOptions();
options.setDecryptionPassword("p@s$S");
try (Archive archive = new Archive("source.zip", options)) {
archive.extractToDirectory("destination");
}
W tym przypadku musimy podać hasło w konstruktorze.
Szyfruj/odszyfruj plik RAR za pomocą Java
Aspose.ZIP nie zapewnia funkcjonalności do tworzenia
archiwów RAR
; obsługuje wyłącznie ekstrakcję. Archiwum RAR można zaszyfrować, z możliwością ochrony nazw plików lub nie.
W pierwszym scenariuszu użytkownik musi podać hasło deszyfrujące w obiekcie
RarArchiveLoadOptions
podczas inicjalizacji archiwum RAR. W tym drugim przypadku hasło można podać podczas wyodrębniania poszczególnych wpisów.
Odszyfruj plik RAR za pomocą zaszyfrowanych nazw plików
RarArchiveLoadOptions options = new RarArchiveLoadOptions();
options.setDecryptionPassword("p@s$S");
try (RarArchive archive = new RarArchive("source.rar", options)) {
archive.extractToDirectory("destination");
}
Ten kod odszyfrowuje i wyodrębnia zawartość archiwum „source.rar” do folderu „destination”. Jeśli archiwum jest zaszyfrowane, używa określonego hasła deszyfrującego.
Oto opis działania:
- Wczytaj ustawienia z hasłem deszyfrującym: Najpierw tworzy obiekt ustawień ładowania dla Archiwum RAR przy użyciu operatora opcji RarArchiveLoadOptions. Następnie ustawia hasło do odszyfrowania archiwum przy użyciu metody options.setDecryptionPassword.
- Otwórz zaszyfrowane archiwum: Następna linia otwiera archiwum „source.rar” do odczytu i edycji przy użyciu Konstrukcja spróbuj z zasobami. Określa obiekt opcji z hasłem deszyfrowania do obsługi zaszyfrowanych archiwów.
- Wyodrębnij zawartość archiwum: Na koniec metoda archive.extractToDirectory wyodrębnia zawartość odszyfrowanego archiwum do „miejsca docelowego”. folderze.
Ukierunkowany plik RAR do odszyfrowania
try (RarArchive archive = new RarArchive("source.rar")) {
archive.getEntries().get(0).extract("first_entry.bin", "p@s$S");
}
Ten fragment kodu próbuje wyodrębnić pierwszy wpis z archiwum RAR „source.rar” i zapisać go jako „first_entry.bin”, używając hasła deszyfrującego „p@s$S”, jeśli archiwum jest zaszyfrowane.
Odszyfrowywanie określonej zawartości wpisu RAR (strumień)
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());
}
}
Ten fragment kodu dotyczy określonego wpisu w archiwum RAR. Odszyfrowuje zawartość wpisu i przesyła ją strumieniowo bezpośrednio do pamięci, zakładając, że szyfrowane są tylko dane wpisu, a nie same nazwy plików.
Pełny opis działania kodu:
- Inicjalizacja bufora pamięci : Tworzony jest obiekt docelowy o nazwie ByteArrayOutputStream, który ma służyć jako bufor w pamięci do przechowywania odszyfrowanej zawartości docelowego wpisu.
- Dostęp do archiwum i wpisu: W kodzie zastosowano metodę try-with -resources blok, aby otworzyć źródłowe archiwum RAR „source.rar”. Wewnątrz innego bloku try-with-resources pobiera strumień wejściowy dla drugiego wpisu i odszyfrowuje go przy użyciu hasła „p@s$S”.
- Deszyfrowanie i przesyłanie strumieniowe: odszyfrowane bajty są odczytywane ze strumienia wejściowego fragmentami przy użyciu bufora. Każdy fragment jest następnie zapisywany w docelowym strumieniu ByteArrayOutputStream do momentu przetworzenia wszystkich danych.
- Obsługa błędów: Kod zawiera blok catch do obsługi wszelkie potencjalne wyjątki IO, które mogą pojawić się podczas procesu deszyfrowania lub przesyłania strumieniowego. Jeśli wystąpi błąd, komunikat o błędzie jest drukowany w standardowym strumieniu błędów w celu debugowania.
Szyfruj i odszyfruj plik 7-ZIP za pomocą Java
Zostanie zaimplementowany w Aspose.ZIP dla wersji Java 24.4. Jedyną opcją szyfrowania archiwum 7z jest AES.
Zaszyfruj i skompresuj plik 7-Zip za pomocą 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);
}
}
Archiwa 7Z obsługują możliwość szyfrowania każdego wpisu własnym hasłem lub pozostawienia go bez ochrony. Ten kod tworzy nowe archiwum 7z z kompresją i szyfrowaniem LZMA2 i AES.
- Otwieranie pliku: Stream pliku jest używany do otwierania nowego pliku o nazwie „archive.7z” w trybie tworzenia.
- Inicjowanie obiektów: Tworzone są trzy obiekty FileInfo dla plików „alice29.txt”, „asyoulik.txt” i „fields.c”.
- Tworzenie pliku 7-zip: Obiekt SevenZipArchive jest tworzony przy użyciu:
- ustawień kompresji LZMA2.
- Ustawienia szyfrowania AES przy użyciu hasła „p@s$S” - Dodawanie plików: Metody CreateEntry służą do dodawania każdego pliku do archiwum z osobnego źródło.
- Zapisywanie archiwum: Archiwum jest zapisywane w strumieniu plików szFile przy użyciu metody Save.
Szyfrowanie selektywne w archiwum 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);
}
}
Ten kod tworzy archiwum 7z zawierające trzy pliki: „alice29.txt”, „asyoulik.txt” i „fields.c”. Dwa ostatnie pliki są skompresowane i szyfrowane przy użyciu różnych haseł.
W przeciwieństwie do poprzedniego kodu, metoda archive.CreateEntry jest używana na obiekcie archiwum w celu utworzenia wpisów dla każdego pliku. Podczas tworzenia wpisu dla pliku „asyoulik.txt” z obiektu source2 FileInfo trzeci parametr CreateEntry jest ustawiany na false. Oznacza to, że zostaną użyte niestandardowe ustawienia kompresji i szyfrowania zdefiniowane w czwartym parametrze (obiekt SevenZipEntrySettings). W tym przypadku ustawienia określają kompresję „Zip LZMA2” i szyfrowanie „Zip AES” z hasłem „p@s$S”.
Podobnie jak w przypadku ZIP, użytkownik może odszyfrować całe archiwum lub wybrany z niego wpis.
Archiwum 7Z
można zaszyfrować z ochroną lub bez niej nazwy plików. Jeśli nazwy plików są zaszyfrowane, musisz podać hasło
podczas tworzenia instancji archiwum
.
Deszyfrowanie 7z z zaszyfrowanymi nazwami plików
try (SevenZipArchive archive = new SevenZipArchive("archive.7z", "p@s$S")) {
archive.extractToDirectory("C:\\extracted");
}
Ten kod wykorzystuje blok try-with-resources do otwarcia archiwum 7z o nazwie „archive.7z” chronionego hasłem „p@s$S”. Następnie rozpakowuje zawartość archiwum do folderu „C:\extracted”.
Niezależnie od tego, czy nazwy plików są zaszyfrowane, czy nie, bezpieczne jest podanie hasła w konstruktorze rozpakowującym. Poniższy przykład będzie działać tylko wtedy, gdy chroniona jest tylko treść.
Odszyfrowanie konkretnego wpisu 7z
try (SevenZipArchive archive = new SevenZipArchive("archive.7z")) {
archive.getEntries().get(0).extract("data.bin", "p@s$S");
}
Ten kod wykorzystuje blok try-with-resources do otwarcia archiwum 7z o nazwie „archive.7z” chronionego hasłem „p@s$S”. Następnie rozpakowuje zawartość archiwum do folderu „C:\extracted”.
Niezależnie od tego, czy nazwy plików są zaszyfrowane, czy nie, bezpieczne jest podanie hasła w konstruktorze rozpakowującym. Poniższy przykład będzie działać tylko wtedy, gdy chroniona jest tylko treść.
Inne obsługiwane API kompresji Java
Skorzystaj z biblioteki Java Aspose.ZIP, aby konwertować, scalać, edytować dokumenty w formacie zip, wyodrębniać dane z archiwów i nie tylko!
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