Przegląd

Aspose.ZIP ułatwia szereg operacji szyfrowania i deszyfrowania archiwów. Używając Aspose.Zip API dla Python.NET, możesz efektywnie szyfrować i deszyfrować archiwa ZIP, RAR i 7-Zip.

Szyfruj pliki ZIP

W przypadku archiwów ZIP można zastosować dwie techniki szyfrowania: starszą, obecnie uważaną za mniej bezpieczną tradycyjną metodę, oraz bardziej niezawodne, nowoczesne szyfrowanie AES. Standard ZIP umożliwia szyfrowanie poszczególnych wpisów w tym samym archiwum przy użyciu dowolnej metody. Szyfrowanie AES, znane z większego bezpieczeństwa, obsługuje różne długości kluczy, w tym 128-bitowe, 192-bitowe i 256-bitowe, oferując lepszą ochronę wrażliwych danych w archiwach ZIP. Każdy wpis w tym samym archiwum może być zaszyfrowany własnym szyfrowaniem, dzięki czemu można mieszać różne typy szyfrowania w tym samym archiwum.

Odblokuj ZIP metodą 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)

Kod tworzy nowy plik ZIP o nazwie Archive.zip, kompresuje zawartość pliku alice29.txt metodą kompresji Deflate, szyfruje ją tradycyjną metodą szyfrowania ZIP przy użyciu hasła „p@s$S” oraz zapisuje skompresowany i zaszyfrowany plik plik do nowo utworzonego archiwum ZIP.

Zaszyfruj ZIP za pomocą 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)

Dostarczony kod demonstruje, jak utworzyć archiwum ZIP o nazwie Archive.zip, skompresować plik alice29.txt przy użyciu metody kompresji Deflate i zaszyfrować go za pomocą szyfrowania AES-256 przy użyciu hasła „p@s$S”. 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.
To pokazuje elastyczność stosowania szyfrowania do określonych wpisów w archiwum ZIP, dzięki czemu różne pliki mogą mieć różne poziomy ochrony. Takie podejście pozwala na bardziej szczegółową i dostosowaną strategię bezpieczeństwa, w której poszczególne pliki lub grupy plików mogą mieć różne poziomy ochrony. Należy jednak pamiętać, że taka praktyka może skomplikować proces zarządzania i deszyfrowania, a kompatybilność z różnymi narzędziami do archiwizacji ZIP może się różnić.

Zaszyfruj ZIP drugi wpis z trzech

    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)

Ten kod demonstruje tworzenie chronionego hasłem archiwum ZIP w Pythonie. Dodaje trzy pliki: alice29.txt, asyoulik.txt i Fields.c.
Oto jak to działa:
Otwiera lub tworzy plik archiwum ZIP na podstawie nazwy zapisanej w this.resultFile. Tworzy obiekty FileInfo reprezentujące pliki, które mają zostać dodane. Tworzy nowy obiekt archiwum.
Dodaje pliki: alice29.txt i Fields.c są dodawane do archiwum bez żadnych specjalnych ustawień. Dodano plik asyoulik.txt z szyfrowaniem AES-256, wymagającym hasła p@s$ do odszyfrowania. Zapisuje ukończone archiwum do określonego pliku.

Szyfruj ZIP różnymi metodami i hasłami

    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)

Ten fragment kodu demonstruje tworzenie archiwum ZIP w Pythonie, w którym poszczególne pliki są szyfrowane różnymi metodami i hasłami. Oto jak to działa:
Konfiguracja pliku: Otwiera lub tworzy plik dla archiwum ZIP na podstawie nazwy zapisanej w this.resultFile. Tworzy obiekty FileInfo reprezentujące pliki do dodania: alice29.txt, asyoulik.txt i Fields.c.
Tworzenie archiwum: Tworzy nowy obiekt archiwum (archiwum).
Dodawanie zaszyfrowanych plików: Kod wykorzystuje pętlę do przeglądania plików i dodawania ich do archiwum z określonymi ustawieniami szyfrowania:
alice29.txt - Ten plik jest dodawany za pomocą ** Szyfrowanie AES-256** i do odszyfrowania wymagane jest hasło „p@s”.
asyoulik.txt - Ten plik jest dodawany przy użyciu innej metody szyfrowania zwanej ** Szyfrowaniem tradycyjnym**. Do odszyfrowania używa również osobnego hasła „p@s”.
fields.c - Ten plik jest ponownie dodawany z szyfrowaniem AES-128, ale z innym hasłem „p@s$3” w celu odszyfrowania.
Zapisywanie archiwum: Na koniec kod zapisuje całe archiwum zawierające zaszyfrowane pliki do określonego pliku.

Szyfruj archiwum ZIP różnymi metodami i hasłami

    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)

Ten kod pobiera istniejące archiwum ZIP plain.zip, szyfruje jego zawartość przy użyciu AES-256 z hasłem p@s$ i zapisuje zaszyfrowaną wersję jako nowe archiwum o nazwie encrypted.zip.

Odszyfruj pliki ZIP

Odszyfruj plik ZIP za pomocą hasła

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

Użytkownik ma możliwość odszyfrowania określonego wpisu w zaszyfrowanym archiwum ZIP. Ten fragment kodu demonstruje podstawowe podejście do odszyfrowywania pierwszego wpisu z archiwum ZIP chronionego hasłem. Jeśli hasło jest prawidłowe, archiwum zostanie pomyślnie otwarte.

Odszyfruj cały plik 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")

Ten prosty kod pobiera chronione hasłem archiwum ZIP „source.zip”, używa podanego hasła „p@s$S” do odszyfrowania i rozpakowuje całą jego zawartość do wyznaczonego folderu „destination”.

Odszyfruj plik RAR

Aspose.ZIP nie obsługuje kompozycji archiwum RAR, obsługuje jedynie ekstrakcję. Archiwum RAR można szyfrować z ochroną nazw plików lub bez nich.
W pierwszym przypadku użytkownik musi podać hasło do odszyfrowania w ramach RarArchiveLoadOptions na samym początku tworzenia instancji archiwum RAR. W tym drugim przypadku możliwe jest późniejsze podanie hasła podczas wyodrębniania wpisu.

Odszyfruj całe archiwum RAR z zaszyfrowanymi nazwami plików

    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")

Zasadniczo ten kod działa podobnie do przykładu ZIP, ale działa specjalnie dla archiwów RAR. Pobiera chronione hasłem archiwum RAR „source.rar”, używa podanego hasła „p@s$S” do odszyfrowania i rozpakowuje całą jego zawartość do wyznaczonego folderu „destination”.

Odszyfruj określony wpis z archiwum RAR

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

Ten kod otwiera archiwum RAR source.rar, odszyfrowuje i wyodrębnia pierwszy wpis z archiwum przy użyciu hasła „p@s$S” i zapisuje go w pliku First_entry.bin. Ten przykład zadziała, jeśli szyfrowana będzie tylko treść wpisów, ale nazwy plików nie.

Odszyfruj określony wpis z archiwum RAR jako strumień

    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())

Ten kod otwiera archiwum RAR source.rar, odszyfrowuje drugi rekord archiwum przy użyciu hasła „p@s$S” i wczytuje jego zawartość do strumienia ByteArrayOutputStream. Dzięki zastosowaniu bufora odczytu kod zapewnia stopniowy transfer danych, co pomaga efektywnie obsługiwać duże pliki. Ten przykład zadziała, jeśli szyfrowana będzie tylko treść wpisów, ale nazwy plików nie. W tym przykładowym wpisie bajty są kopiowane do strumienia pamięci.

Szyfrowanie 7zip za pomocą AES 256

Jedyną opcją szyfrowania archiwum 7z jest AES . Archiwum wykorzystuje kompresję LZMA2 w celu skutecznego zmniejszania rozmiaru pliku oraz szyfrowanie AES z hasłem dla większego bezpieczeństwa. Kod iteruje po plikach i dodaje je do archiwum przy użyciu metody CreateEntry.

Zaszyfruj i skompresuj całe archiwum 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)

Ten kod tworzy zaszyfrowane archiwum 7z zawierające trzy pliki: alice29.txt, asyoulik.txt i Fields.c. Archiwum wykorzystuje kompresję LZMA2 i szyfrowanie AES z hasłem „p@s$S”. Pliki dodawane są do archiwum metodą CreateEntry, a samo archiwum zapisywane jest do utworzonego pliku Archive.7z.

7z Szyfruj za pomocą hasła

    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)

Ten kod tworzy zaszyfrowane archiwum 7z zawierające trzy pliki: alice29.txt, asyoulik.txt i Fields.c. Pierwszy plik jest dodawany do archiwum bez specjalnych ustawień. Drugi plik jest załączony przy użyciu kompresji LZMA2 i szyfrowania AES z hasłem „p@s$S”. Trzeci plik jest załączony przy użyciu kompresji LZMA2 i szyfrowania AES z hasłem „$ecret”. Na koniec archiwum jest zapisywane w pliku Archive.7z.
Podobnie jak w przypadku ZIP, użytkownik może odszyfrować całe archiwum lub wybrany z niego wpis. Archiwum 7Z można szyfrować z ochroną nazw plików lub bez nich. Jeśli nazwy plików są zaszyfrowane, musisz podać hasło podczas tworzenia instancji archiwum .

Odszyfruj pliki 7ZIP

Odszyfruj archiwum 7z zaszyfrowanymi nazwami plików

    with zp.sevenzip.SevenZipArchive("archive.7z", "p@s$S") as archive: 
        archive.extract_to_directory("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ść.

Odszyfruj konkretny wpis 7zip

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

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 funkcje Aspose.ZIP dla Python.Net API

Dzięki bibliotece Aspose.ZIP w Python.Net możesz bezproblemowo wykonywać różne zadania związane z dokumentami w formacie ZIP. Niezależnie od tego, czy potrzebujesz konwertować formaty, scalać pliki, edytować zawartość czy wyodrębniać dane, Aspose.ZIP zapewnia wszechstronną funkcjonalność usprawniającą przepływ pracy i zwiększającą produktywność.

  

Support and Learning Resources

  
  

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