Overzicht

Aspose.ZIP faciliteert een aantal bewerkingen met betrekking tot het versleutelen en ontsleutelen van archieven. Met de Aspose.Zip API voor Java kunt u snel ZIP-, RAR- en 7-Zip-archieven coderen en decoderen.

Codeer/decodeer ZIP-bestanden

Er zijn twee versleutelingsmethoden beschikbaar voor ZIP-archieven : de traditionele methode, die nu als zwak wordt beschouwd, en de moderne AES-methode. Dankzij de ZIP-standaard kan elk item met beide methoden worden gecodeerd, zelfs binnen hetzelfde ZIP-archief. AES-codering biedt een sterkere beveiliging en is beschikbaar in verschillende sleutellengtes (128-bit, 192-bit en 256-bit). Dit biedt een betere bescherming voor gevoelige gegevens die zijn opgeslagen in ZIP-archieven.

Versleutel een ZIP met de Deflate-methode

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

Deze code creëert een ZIP-archief met de naam "archive.zip" met behulp van de Deflate-compressiemethode en traditionele ZIP-codering. Dit wordt bereikt door eerst een nieuwe uitvoerstroom voor het archief te openen met behulp van try FileOutputStream. De FileInputStream-bron fungeert als invoerstroom voor het bronbestand "alice29.txt" dat aan het archief wordt toegevoegd. Vervolgens wordt een Archive-object gemaakt, waarin zowel de Deflate-compressiemethode als de traditionele codering worden gespecificeerd. Het wachtwoord voor de codering is ingesteld op "p@s$S". De catch-instructie verwerkt eventuele uitzonderingen die kunnen optreden tijdens bestands- of archiefbewerkingen, waarbij een foutmelding naar de console wordt afgedrukt.

ZIP coderen met AES-methode

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

Deze code creëert een ZIP-archief met de naam "archive.zip" met behulp van de Deflate-compressiemethode en codeert de gegevens met het sterke AES-256-algoritme.
Voor deze voorbeelden hebben we instanties geleverd van EncryptionSetting binnen de overeenkomstige Archive constructor . Het is mogelijk om encryptie toe te passen voor bepaalde toegang, waardoor andere onbeschermd blijven.

Gebruik het ZIP-coderingsalgoritme om de tweede invoer van drie te coderen

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

Deze code demonstreert het maken van een ZIP-archief met drie invoerbestanden: "alice29.txt", "asyoulik.txt" en "fields.c". Uniek is dat het eerste en laatste bestand ongecodeerd worden toegevoegd, terwijl het tweede bestand, "asyoulik.txt", met een wachtwoord is beveiligd met behulp van AES-256-codering met het wachtwoord "p@s$S".
Deze benadering van selectief coderen bestanden in een ZIP-archief zijn ongebruikelijk. De Aspose.Zip API voor Java biedt echter de functionaliteit om specifieke vermeldingen binnen een ZIP-archief te versleutelen met behulp van verschillende versleutelingsmethoden en wachtwoorden. Hoewel dit de gegevensbeveiliging verbetert, maar het proces van archiefbeheer en decodering compliceert

Versleutel ZIP met verschillende methoden en wachtwoorden

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

Deze code creëert een ZIP-archief met drie gecodeerde bestanden: "alice29.txt", "asyoulik.txt" en "fields.c". Elk bestand wordt gecodeerd met een specifieke methode.
Het eerste deel weerspiegelt de functionaliteit van het vorige codevoorbeeld. Het kerngedeelte richt zich op het maken van vermeldingen binnen het archief voor elk bestand. Deze vermeldingen verwijzen naar hun namen en bronbestanden (bestandsobjecten). Versleuteling wordt op verschillende manieren toegepast:

  • "alice29.txt": AES-256-versleuteling met het wachtwoord "p@s$S"
  • "asyoulik.txt" Traditioneel coderingsmethode met het wachtwoord "p@s$D"
  • "fields.c" AES-256-codering met het wachtwoord "p@s$F"
Het laatste deel slaat het archief op en omvat foutafhandeling om u op de hoogte te stellen van eventuele problemen tijdens het proces.

Versleutel het bestaande ZIP-archief

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

Deze code neemt een bestaand "plain.zip"-archief, past AES-codering toe met het wachtwoord "p@s$S", en slaat het op als een nieuw archief met de naam "encrypted.zip"

Decodeer ZIP-bestand met wachtwoord

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

Deze code haalt het eerste item uit het "source.zip"-archief en slaat het op als een bestand met de naam "first_entry.bin" met het wachtwoord "p@s$S".
De gebruiker heeft de mogelijkheid om een ​​specifiek item binnen het gecodeerde ZIP-archief of het hele archief als geheel te decoderen.

Decodeer het hele ZIP-bestand

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

In dit geval moeten we een wachtwoord opgeven binnen een constructor.

Versleutel/decodeer RAR-bestand met Java

Aspose.ZIP biedt geen functionaliteit voor het maken van RAR-archieven ; het ondersteunt uitsluitend extractie. Een RAR-archief kan worden gecodeerd, met de optie om bestandsnamen al dan niet te beschermen.
In het eerste scenario moet de gebruiker het decoderingswachtwoord opgeven in het object RarArchiveLoadOptions bij de initialisatie van de RAR-archief. In het laatste geval kan het wachtwoord worden opgegeven tijdens het extraheren van individuele vermeldingen.

Decodeer RAR-bestand met gecodeerde bestandsnamen

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

Deze code decodeert en extraheert de inhoud van het archief "source.rar" naar de map "destination". Als het archief is gecodeerd, wordt het opgegeven decoderingswachtwoord gebruikt.
Hier is een overzicht van hoe het werkt:

  • Instellingen laden met decoderingswachtwoord: eerst wordt er een object voor het laden van instellingen gemaakt voor de RAR-archief met behulp van de optieoperator RarArchiveLoadOptions. Vervolgens wordt het decoderingswachtwoord voor het archief ingesteld met behulp van de options.setDecryptionPassword-methode.
  • Open Encrypted Archive: De volgende regel opent het "source.rar"-archief voor lezen en bewerken met behulp van een probeer-met-middelen-constructie. Het specificeert het optieobject met het decoderingswachtwoord om gecodeerde archieven te verwerken.
  • Archiefinhoud extraheren: ten slotte extraheert de archive.extractToDirectory-methode de inhoud van het gedecodeerde archief naar de "bestemming" map.

Gerichte decodering RAR-bestand

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

Dit codefragment probeert het eerste item uit het RAR-archief "source.rar" te extraheren en op te slaan als "first_entry.bin", met behulp van het decoderingswachtwoord "p@s$S" als het archief is gecodeerd.

Specifieke RAR-invoerinhoud decoderen (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());
        }
    }

Dit codefragment is gericht op een specifiek item binnen een RAR-archief. Het decodeert de inhoud van het item en streamt deze rechtstreeks naar het geheugen, ervan uitgaande dat alleen de itemgegevens zijn gecodeerd en niet de bestandsnamen zelf.
Een volledige beschrijving van wat de code doet:

  • Geheugenbufferinitialisatie : Er wordt een bestemming met de naam ByteArrayOutputStream gemaakt die als buffer in het geheugen dient voor het opslaan van de gedecodeerde inhoud van het beoogde item.
  • Archief- en toegangstoegang: de code maakt gebruik van een try-with -resources blokkeren om het bron-RAR-archief "source.rar" te openen. Binnen een ander try-with-resources-blok haalt het een invoerstroom op voor het tweede item en decodeert deze met het wachtwoord "p@s$S".
  • Decryptie en streaming: de gedecodeerde bytes worden in stukjes uit de invoerstroom gelezen met behulp van een buffer. Elk stuk wordt vervolgens naar de bestemming ByteArrayOutputStream geschreven totdat alle gegevens zijn verwerkt.
  • Foutafhandeling: de code bevat een catch-blok dat moet worden verwerkt eventuele IOExceptions die kunnen optreden tijdens het decoderings- of streamingproces. Als er een fout optreedt, wordt het foutbericht afgedrukt naar de standaardfoutstroom voor foutopsporingsdoeleinden.

Codeer en decodeer 7-ZIP-bestanden met Java

Zal worden geïmplementeerd in Aspose.ZIP voor Java 24.4-versie. De enige 7z-archiefversleutelingsoptie is AES.

Versleutel en comprimeer 7-Zip-bestanden met 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-archieven ondersteunen de mogelijkheid om elk item met een eigen wachtwoord te coderen of onbeschermd te laten. Deze code creëert een nieuw 7z-archief met LZMA2- en AES-compressie en -codering.

  • Bestand openen: Een FileStream wordt gebruikt om een ​​nieuw bestand met de naam "archive.7z" te openen in de aanmaakmodus.
  • Objecten initialiseren: Er worden drie FileInfo-objecten gemaakt voor de bestanden "alice29.txt", "asyoulik.txt" en "fields.c".
  • Een 7-zip-bestand maken: het SevenZipArchive-object wordt gemaakt met:
    - LZMA2 compressie-instellingen.
    - AES-codering-instellingen met het wachtwoord "p@s$S"
  • Bestanden toevoegen: de CreateEntry-methoden worden gebruikt om elk bestand vanuit een afzonderlijk bestand aan het archief toe te voegen bron.
  • Het archief opslaan: het archief wordt opgeslagen in de szFile bestandsstroom met behulp van de Save-methode.

Selectieve codering in 7z-archief

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

Deze code creëert een 7z-archief met drie bestanden: "alice29.txt", "asyoulik.txt" en "fields.c". De laatste twee bestanden zijn gecomprimeerd en gecodeerd met verschillende wachtwoorden.
In tegenstelling tot de vorige code wordt de methode archive.CreateEntry gebruikt op het archiefobject om vermeldingen voor elk bestand te maken. Wanneer u de vermelding voor "asyoulik.txt" maakt vanuit het source2 FileInfo-object, wordt de derde parameter van CreateEntry ingesteld op false. Dit geeft aan dat aangepaste compressie- en coderingsinstellingen zullen worden gebruikt, gedefinieerd in de vierde parameter (een SevenZipEntrySettings-object). In dit geval specificeren de instellingen "Zip LZMA2"-compressie en "Zip AES"-codering met het wachtwoord "p@s$S".
Net als bij ZIP kan de gebruiker het hele archief of een bepaald item daaruit decoderen.
7Z-archief kan worden gecodeerd met of zonder beveiliging bestandsnamen. Als bestandsnamen gecodeerd zijn, moet u een wachtwoord opgeven bij archivering .

7z-decodering met gecodeerde bestandsnamen

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

Deze code maakt gebruik van een try-with-resources-blok om een ​​7z-archief te openen met de naam "archive.7z", beveiligd met het wachtwoord "p@s$S". Vervolgens wordt de inhoud van het archief uitgepakt naar de map "C:\extracted".
Ongeacht of bestandsnamen gecodeerd zijn of niet, het is veilig om een ​​wachtwoord op te geven binnen de uitpakkende constructor. Het onderstaande voorbeeld werkt alleen als alleen de inhoud wordt beschermd.

7z-specifieke invoer decoderen

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

Deze code maakt gebruik van een try-with-resources-blok om een ​​7z-archief te openen met de naam "archive.7z", beveiligd met het wachtwoord "p@s$S". Vervolgens wordt de inhoud van het archief uitgepakt naar de map "C:\extracted".
Ongeacht of bestandsnamen gecodeerd zijn of niet, het is veilig om een ​​wachtwoord op te geven binnen de uitpakkende constructor. Het onderstaande voorbeeld werkt alleen als alleen de inhoud wordt beschermd.

  

Support and Learning Resources

  
  

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