Přehled

Aspose.ZIP usnadňuje řadu operací souvisejících se šifrováním a dešifrováním archivů. Pomocí Aspose.Zip API pro Java můžete rychle šifrovat a dešifrovat archivy ZIP, RAR, 7-Zip.

Šifrování/dešifrování souborů ZIP

Pro [archivy ZIP] jsou k dispozici dvě metody šifrování (/zip/cs/most-common-archives/what-is-zip/): tradiční metoda, která je nyní považována za slabou, a moderní metoda AES. Standard ZIP umožňuje zašifrovat jakoukoli položku oběma metodami, a to i v rámci stejného archivu ZIP. Šifrování AES nabízí silnější zabezpečení a je k dispozici v různých délkách klíče (128-bit, 192-bit a 256-bit). To poskytuje lepší ochranu citlivých dat uložených v archivech ZIP.

Zašifrujte ZIP pomocí metody 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());
    }

Tento kód vytvoří ZIP archiv s názvem "archive.zip" pomocí metody komprese Deflate a tradičního šifrování ZIP. Dosahuje toho tak, že nejprve otevře nový výstupní proud pro archiv pomocí try FileOutputStream. Zdroj FileInputStream slouží jako vstupní proud pro zdrojový soubor "alice29.txt", který bude přidán do archivu. Dále je vytvořen objekt Archive, který specifikuje jak metodu komprese Deflate, tak tradiční šifrování. Heslo pro šifrování je nastaveno na "p@s$S". Příkaz catch zpracovává všechny výjimky, které mohou nastat během operací souborů nebo archivace, a vytiskne na konzolu chybovou zprávu.

Šifrování ZIP metodou 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());
    }

Tento kód vytvoří ZIP archiv s názvem "archive.zip" pomocí metody komprese Deflate a zašifruje data pomocí silného AES-256 algoritmu.
Pro tyto ukázky jsme poskytli instance EncryptionSetting v rámci odpovídajícího konstruktoru archivu . Pro konkrétní záznam je možné použít šifrování, ostatní nechráněné.

Pomocí šifrovacího algoritmu ZIP zašifrujte druhý záznam ze tří

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

Tento kód ukazuje vytvoření ZIP archivu se třemi vstupními soubory: "alice29.txt", "asyoulik.txt" a "fields.c". Jedinečně se první a poslední soubor přidávají nešifrované, zatímco druhý soubor, "asyoulik.txt", je chráněn heslem pomocí šifrování AES-256 s heslem "p@s$S".
Tento přístup selektivního šifrování souborů v archivu ZIP je neobvyklé. Aspose.Zip API pro Java však poskytuje funkce pro šifrování konkrétních položek v archivu ZIP pomocí různých metod šifrování a hesel. To sice zvyšuje bezpečnost dat, ale komplikuje proces správy archivu a dešifrování

Šifrujte ZIP různými metodami a hesly

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

Tento kód vytvoří ZIP archiv obsahující tři zašifrované soubory: "alice29.txt", "asyoulik.txt" a "fields.c". Každý soubor je zašifrován odlišnou metodou.
První část odráží funkčnost předchozího příkladu kódu. Základní část se zaměřuje na vytváření záznamů v archivu pro každý soubor. Tyto položky odkazují na jejich jména a zdrojové soubory (objekty File). Šifrování se používá různými metodami:

  • "alice29.txt" : AES-256 šifrování s heslem "p@s$S"
  • "asyoulik.txt" : Tradiční metoda šifrování s heslem "p@s$D"
  • "fields.c" : AES-256 šifrování s heslem "p@s$F"
Závěrečná část uloží archiv a zahrnuje zpracování chyb, které vás upozorní na jakékoli problémy během procesu.

Šifrovat existující ZIP archiv

    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);
    }

Tento kód vezme existující archiv "plain.zip", použije na něj šifrování AES s heslem "p@s$S" a uloží jej jako nový archiv s názvem "encrypted.zip"

Dešifrovat soubor ZIP pomocí hesla

    try (Archive archive = new Archive("source.zip")) {
        archive.getEntries().get(0).extract("first_entry.bin", "p@s$S");
    }

Tento kód extrahuje první záznam z archivu "source.zip" a uloží jej jako soubor s názvem "first_entry.bin" s použitím hesla "p@s$S".
Uživatel má možnost dešifrovat buď konkrétní položku v zašifrovaném ZIP archivu, nebo celý archiv jako celek.

Dešifrovat celý soubor ZIP

    ArchiveLoadOptions options = new ArchiveLoadOptions();
    options.setDecryptionPassword("p@s$S");
    try (Archive archive = new Archive("source.zip", options)) {
        archive.extractToDirectory("destination");
    }

V tomto případě musíme zadat heslo v konstruktoru.

Šifrujte/dešifrujte soubor RAR pomocí Java

Aspose.ZIP neposkytuje funkce pro vytváření archivů RAR ; podporuje výhradně extrakci. Archiv RAR lze zašifrovat s možností chránit názvy souborů nebo ne.
V předchozím scénáři musí uživatel zadat dešifrovací heslo v rámci objektu RarArchiveLoadOptions při inicializaci RAR archiv. V druhém případě lze heslo zadat při extrakci jednotlivých záznamů.

Dešifrujte soubor RAR se zašifrovanými názvy souborů

    RarArchiveLoadOptions options = new RarArchiveLoadOptions();
    options.setDecryptionPassword("p@s$S");
    try (RarArchive archive = new RarArchive("source.rar", options)) {
        archive.extractToDirectory("destination");
    }

Tento kód dešifruje a extrahuje obsah archivu "source.rar" do složky "destination". Pokud je archiv zašifrován, používá zadané dešifrovací heslo.
Zde je rozpis toho, jak to funguje:

  • Načíst nastavení s dešifrovacím heslem: Nejprve vytvoří objekt nastavení načtení pro Archiv RAR pomocí operátoru voleb RarArchiveLoadOptions. Poté nastaví dešifrovací heslo pro archiv pomocí metody options.setDecryptionPassword.
  • Otevřít šifrovaný archiv: Další řádek otevře archiv "source.rar" pro čtení a úpravy pomocí konstrukt zkuste-se-zdroji. Specifikuje objekt options s dešifrovacím heslem pro zpracování zašifrovaných archivů.
  • Extrahovat obsah archivu: Nakonec metoda archive.extractToDirectory rozbalí obsah dešifrovaného archivu do "destinace" složka.

Cílené dešifrování souboru RAR

    try (RarArchive archive = new RarArchive("source.rar")) {
        archive.getEntries().get(0).extract("first_entry.bin", "p@s$S");
    }

Tento fragment kódu se pokusí extrahovat první položku z archivu RAR "source.rar" a uložit ji jako "first_entry.bin" pomocí dešifrovacího hesla "p@s$S", pokud je archiv zašifrován.

Dešifrování specifického vstupního obsahu RAR (stream)

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

Tento fragment kódu cílí na konkrétní položku v archivu RAR. Dešifruje obsah položky a přenese jej přímo do paměti za předpokladu, že jsou zašifrována pouze data položky, nikoli samotné názvy souborů.
Úplný popis toho, co kód dělá:

  • Inicializace vyrovnávací paměti : Vytvoří se pojmenovaný cíl ByteArrayOutputStream, který bude sloužit jako vyrovnávací paměť v paměti pro uložení dešifrovaného obsahu cílové položky.
  • Přístup k archivu a položce: Kód využívá funkci try-with -resources blok pro otevření zdrojového RAR archivu "source.rar". Uvnitř dalšího bloku try-with-resources načte vstupní proud pro druhý záznam a dešifruje jej pomocí hesla "p@s$S".
  • Dešifrování a streamování: Dešifrované bajty jsou čteny ze vstupního toku v blocích pomocí vyrovnávací paměti. Každý chunk je pak zapsán do cílového ByteArrayOutputStream, dokud nejsou zpracována všechna data.
  • Ošetření chyb: Kód obsahuje catch blok ke zpracování jakékoli potenciální IOExceptions, které mohou nastat během procesu dešifrování nebo streamování. Pokud dojde k chybě, chybová zpráva se vytiskne do standardního chybového proudu pro účely ladění.

Šifrujte a dešifrujte soubor 7-ZIP pomocí Java

Bude implementováno v Aspose.ZIP pro verzi Java 24.4. Jedinou možností šifrování archivu 7z je AES.

Šifrujte a komprimujte soubor 7-Zip 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);
        }
    }

Archivy 7Z podporují možnost zašifrovat každý záznam vlastním heslem nebo nechat nechráněné. Tento kód vytvoří nový archiv 7z s kompresí a šifrováním LZMA2 a AES.

  • Otevření souboru: FileStream se používá k otevření nového souboru s názvem "archive.7z" v režimu vytváření.
  • Inicializace objektů: Pro soubory "alice29.txt", "asyoulik.txt" a "fields.c" jsou vytvořeny tři objekty FileInfo.
  • Vytvoření souboru 7-zip: Objekt SevenZipArchive je vytvořen s:
    - LZMA2 nastavení komprese.
    - Nastavení šifrování AES pomocí hesla "p@s$S"
  • Přidávání souborů: Metody CreateEntry se používají k přidání každého souboru do archivu ze samostatného zdroj.
  • Uložení archivu: Archiv se uloží do souboru szFile pomocí metody Uložit.

Selektivní šifrování v archivu 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);
        }
    }

Tento kód vytvoří 7z archiv obsahující tři soubory: "alice29.txt", "asyoulik.txt" a "fields.c". Poslední dva soubory jsou komprimovány a šifrovány pomocí různých hesel.
Na rozdíl od předchozího kódu se metoda archive.CreateEntry používá u objektu archivu k vytvoření položek pro každý soubor. Při vytváření položky pro "asyoulik.txt" z objektu source2 FileInfo je třetí parametr CreateEntry nastaven na false. To znamená, že bude použito vlastní nastavení komprese a šifrování, definované ve čtvrtém parametru (objekt SevenZipEntrySettings). V tomto případě nastavení specifikuje kompresi "Zip LZMA2" a šifrování "Zip AES" s heslem "p@s$S".
Podobně jako u ZIP může uživatel dešifrovat buď celý archiv, nebo konkrétní záznam z něj.
7Z archiv lze zašifrovat s ochranou nebo bez ní názvy souborů. Pokud jsou názvy souborů zašifrovány, musíte zadat heslo při vytváření instance archivu .

7z Dešifrování se zašifrovanými názvy souborů

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

Tento kód využívá blok try-with-resources k otevření 7z archivu s názvem "archive.7z" chráněného heslem "p@s$S". Poté rozbalí obsah archivu do složky "C:\extracted".
Bez ohledu na to, zda jsou názvy souborů zašifrovány nebo ne, je bezpečné zadat heslo v konstruktoru extrahování. Níže uvedená ukázka bude fungovat pouze v případě, že je chráněn pouze obsah.

Dešifrování specifického záznamu 7z

    try (SevenZipArchive archive = new SevenZipArchive("archive.7z")) {
        archive.getEntries().get(0).extract("data.bin", "p@s$S");
    }

Tento kód využívá blok try-with-resources k otevření 7z archivu s názvem "archive.7z" chráněného heslem "p@s$S". Poté rozbalí obsah archivu do složky "C:\extracted".
Bez ohledu na to, zda jsou názvy souborů zašifrovány nebo ne, je bezpečné zadat heslo v konstruktoru extrahování. Níže uvedená ukázka bude fungovat pouze v případě, že je chráněn pouze obsah.

  

Support and Learning Resources

  
  

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