Przegląd

Bezpieczeństwo danych ma ogromne znaczenie w dzisiejszym krajobrazie cyfrowym, a jednym ze skutecznych sposobów ochrony wrażliwych informacji jest szyfrowanie. W tym przeglądzie dowiesz się, jak zaszyfrować lub odszyfrować całe archiwum lub określone w nim wpisy, zapewniając poufność i integralność Twoich danych. Aspose.ZIP umożliwia szereg operacji związanych z szyfrowaniem i deszyfrowaniem archiwów.

Jak zaszyfrować lub odszyfrować całe archiwum ZIP

Zaszyfruj archiwum Zip tradycyjną metodą

Istnieją dwie metody szyfrowania archiwum ZIP: tradycyjna, obecnie uważana za słabą, oraz nowoczesny AES. Standard ZIP umożliwia szyfrowanie dowolnego wpisu dowolną z tych metod, nawet w tym samym archiwum. 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 lepszą ochronę wrażliwych danych w archiwach ZIP.

Pliki skompresowane za pomocą Deflate

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new TraditionalEncryptionSettings("p@s$")));
            archive.CreateEntry("alice29.txt", source);
            archive.Save(zipFile);
        }
    }

Szyfrowanie całego archiwum metodą AES

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            using (var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256))))
            {
                archive.CreateEntry("alice29.txt", source);
                archive.Save(zipFile);
            }
        }
    }

Te przykłady pokazują, jak osadzić instancje EncryptionSetting w odpowiednim konstruktorze archiwum . Umożliwia to selektywne szyfrowanie poszczególnych wpisów, pozostawiając inne niezaszyfrowane.

Zaszyfruj drugi z trzech wpisów w Zip Archive

    using (FileStream zipFile = File.Open(this.resultFile, FileMode.Create))
    {
        FileInfo source1 = new FileInfo("alice29.txt");
        FileInfo source2 = new FileInfo("asyoulik.txt");
        FileInfo source3 = new FileInfo("fields.c");

        using (var archive = new Archive())
        {
            archive.CreateEntry("alice29.txt", source1);
            archive.CreateEntry("asyoulik.txt", source2, false, new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256)));
            archive.CreateEntry("fields.c", source3);
            archive.Save(zipFile);
        }
    }

Choć może się to wydawać niekonwencjonalne, w rzeczywistości możliwe jest szyfrowanie określonych wpisów w archiwum ZIP przy użyciu różnych metod szyfrowania i haseł. 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ć.

Szyfruj Zip różnymi metodami i hasłami

    using (FileStream zipFile = File.Open(this.resultFile, FileMode.Create))
    {
        FileInfo source1 = new FileInfo("alice29.txt");
        FileInfo source2 = new FileInfo("asyoulik.txt");
        FileInfo source3 = new FileInfo("fields.c");

        using (var archive = new Archive())
        {
            archive.CreateEntry("alice29.txt", source1, false, new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$1", EncryptionMethod.AES256)));
            archive.CreateEntry("asyoulik.txt", source2, false, new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$2")));
            archive.CreateEntry("fields.c", source3, false, new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$3", EncryptionMethod.AES256)));
            archive.Save(zipFile);
        }
    }

Aspose.ZIP umożliwia dodanie szyfrowania do istniejącego archiwum bez pełnego przepakowywania zawartości. Należy jednak pamiętać, że wszystkie wpisy w archiwum muszą być niezabezpieczone; w przeciwnym razie zostanie zgłoszony wyjątek.

Zaszyfruj istniejące archiwum ZIP

    using (var archive = new Archive("plain.zip"))
    {
        archive.Save("encrypted.zip", new ArchiveSaveOptions() 
        { 
            EncryptionOptions = new AesEcryptionSettings("p@s$", EncryptionMethod.AES256)
        });
    }

Odszyfrowywanie archiwum Zip

Użytkownik ma możliwość odszyfrowania określonego wpisu w zaszyfrowanym archiwum ZIP lub całego archiwum jako całości.

Odszyfruj konkretny wpis

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new TraditionalEncryptionSettings("p@s$")));
            archive.CreateEntry("alice29.txt", source);
            archive.Save(zipFile);
        }
    }

Odszyfruj całe archiwum Zip

W tym przypadku musimy podać hasło w konstruktorze.

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            using (var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256))))
            {
                archive.CreateEntry("alice29.txt", source);
                archive.Save(zipFile);
            }
        }
    }

Jak zaszyfrować lub odszyfrować archiwum RAR

Odszyfrowanie archiwum RAR

Aspose.ZIP nie obsługuje kompozycji archiwum RAR, obsługuje jedynie ekstrakcję. Archiwum RAR można zaszyfrować z ochroną nazw plików lub bez.
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

    using (RarArchive archive = new RarArchive("source.rar", 
    new RarArchiveLoadOptions() { DecryptionPassword = "p@s$" }))
    {
        archive.ExtractToDirectory("destination");
    }

Odszyfruj określony wpis z archiwum RAR

Ten przykład zadziała, jeśli szyfrowana będzie tylko treść wpisów, ale nazwy plików nie.

    using (RarArchive archive = new RarArchive("source.rar"))
    {
        archive.Entries[0].Extract("first_entry.bin", "p@s$");
    }

Odszyfruj określony wpis z archiwum RAR jako strumień

Jednak w tej próbce zakłada się, że szyfrowana jest tylko treść wpisów, a nie nazwy plików . Wymaga to skopiowania bajtów wejściowych do strumienia pamięci.

    MemoryStream destination = new MemoryStream();
    using (RarArchive archive = new RarArchive("source.rar"))
    {
        using (var source = archive.Entries[1].Open("p@s$"))
        {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0)
            {
                destination.Write(buffer, 0, bytesRead);
            }
        }
    }

Jak zaszyfrować lub odszyfrować całe archiwum 7ZIP

Metody szyfrowania plików archiwalnych 7z

Jedyną opcją szyfrowania archiwum 7z jest AES .

Szyfruj i kompresuj całe archiwum 7z za pomocą LZMA2

Archiwa 7Z obsługują możliwość zaszyfrowania każdego wpisu własnym hasłem lub pozostawienia go bez ochrony.

    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$"))))
        {
            archive.CreateEntry("alice29.txt", source1);
            archive.CreateEntry("asyoulik.txt", source2);
            archive.CreateEntry("fields.c", source3);
            archive.Save(szFile);
        }
    }

Zaszyfruj wpisy archiwum 7z własnymi hasłami i pozostaw jeden wpis niezaszyfrowany

Podobnie jak w przypadku ZIP, użytkownik może odszyfrować całe archiwum lub wybrany z niego wpis.
Archiwum 7Z może być szyfrowane z ochroną nazw plików lub bez. Jeśli nazwy plików są zaszyfrowane, musisz podać hasło podczas tworzenia instancji archiwum .

    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$")));
            archive.CreateEntry("fields.c", source3, false, new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("$ecret")));
            archive.Save(szFile);
        }
    }

Odszyfruj całe archiwum z zaszyfrowanymi nazwami plików do katalogu

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ść.

    using (SevenZipArchive archive = new SevenZipArchive("archive.7z", "p@s$")) 
    { 
        archive.ExtractToDirectory("C:\\extracted");
    }

Odszyfruj konkretny wpis

    using (SevenZipArchive archive = new SevenZipArchive("archive.7z"))
    {
        archive.Entries[0].Extract("data.bin", "p@s$");
    }

Inne obsługiwane funkcje Aspose.ZIP dla .NET API

Skorzystaj z biblioteki Aspose.ZIP C#, aby konwertować, scalać, edytować dokumenty w formacie zip, wyodrębniać dane z archiwów i nie tylko!

  

Support and Learning Resources

  
  

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