Επισκόπηση

Το Aspose.ZIP διευκολύνει έναν αριθμό λειτουργιών που σχετίζονται με την κρυπτογράφηση και την αποκρυπτογράφηση των αρχείων. Χρησιμοποιώντας το Aspose.Zip API για Java, μπορείτε να κρυπτογραφήσετε και να αποκρυπτογραφήσετε γρήγορα αρχεία ZIP, RAR, 7-Zip.

Κρυπτογράφηση/Αποκρυπτογράφηση αρχείων ZIP

Υπάρχουν δύο διαθέσιμες μέθοδοι κρυπτογράφησης για αρχεία ZIP : η παραδοσιακή μέθοδος, η οποία θεωρείται πλέον αδύναμη, και η σύγχρονη μέθοδος AES. Το πρότυπο ZIP επιτρέπει την κρυπτογράφηση οποιασδήποτε καταχώρησης με οποιαδήποτε μέθοδο, ακόμη και μέσα στο ίδιο αρχείο ZIP. Η κρυπτογράφηση AES προσφέρει ισχυρότερη ασφάλεια και είναι διαθέσιμη σε διαφορετικά μήκη κλειδιών (128-bit, 192-bit και 256-bit). Αυτό παρέχει καλύτερη προστασία για ευαίσθητα δεδομένα που είναι αποθηκευμένα σε αρχεία ZIP.

Κρυπτογράφηση ενός ZIP με τη μέθοδο 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());
    }

Αυτός ο κώδικας δημιουργεί ένα αρχείο ZIP με το όνομα "archive.zip" χρησιμοποιώντας τη μέθοδο συμπίεσης Deflate και την παραδοσιακή κρυπτογράφηση ZIP. Αυτό το επιτυγχάνει ανοίγοντας πρώτα μια νέα ροή εξόδου για το αρχείο χρησιμοποιώντας το try FileOutputStream. Η πηγή FileInputStream χρησιμεύει ως η ροή εισόδου για το αρχείο προέλευσης "alice29.txt" που θα προστεθεί στο αρχείο. Στη συνέχεια, δημιουργείται ένα αντικείμενο Archive, το οποίο καθορίζει τόσο τη μέθοδο συμπίεσης Deflate όσο και την παραδοσιακή κρυπτογράφηση. Ο κωδικός πρόσβασης για την κρυπτογράφηση έχει οριστεί σε "p@s$S". Η δήλωση catch χειρίζεται τυχόν εξαιρέσεις που ενδέχεται να προκύψουν κατά τη διάρκεια λειτουργιών αρχείων ή αρχειοθέτησης, εκτυπώνοντας ένα μήνυμα σφάλματος στην κονσόλα.

Κρυπτογράφηση ZIP με μέθοδο 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());
    }

Αυτός ο κώδικας δημιουργεί ένα αρχείο ZIP με το όνομα "archive.zip" χρησιμοποιώντας τη μέθοδο συμπίεσης Deflate και κρυπτογραφεί τα δεδομένα με τον ισχυρό αλγόριθμο AES-256.
Για αυτά τα δείγματα παρέχουμε παρουσίες του EncryptionSetting εντός του αντίστοιχου Archive constructor . Είναι δυνατή η εφαρμογή κρυπτογράφησης για συγκεκριμένη καταχώρηση αφήνοντας άλλες απροστάτευτες.

Χρησιμοποιώντας τον αλγόριθμο κρυπτογράφησης ZIP, κρυπτογραφήστε τη δεύτερη καταχώρηση των τριών

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

Αυτός ο κώδικας δείχνει τη δημιουργία ενός αρχείου ZIP με τρία αρχεία εισόδου: "alice29.txt", "asyoulik.txt" και "fields.c". Μοναδικά, το πρώτο και το τελευταίο αρχείο προστίθενται χωρίς κρυπτογράφηση, ενώ το δεύτερο αρχείο, "asyoulik.txt", προστατεύεται με κωδικό πρόσβασης χρησιμοποιώντας κρυπτογράφηση AES-256 με τον κωδικό πρόσβασης "p@s$S".
Αυτή η προσέγγιση επιλεκτικής κρυπτογράφησης αρχεία μέσα σε ένα αρχείο ZIP είναι ασυνήθιστο. Ωστόσο, το Aspose.Zip API για Java παρέχει τη δυνατότητα κρυπτογράφησης συγκεκριμένων καταχωρήσεων σε ένα αρχείο ZIP χρησιμοποιώντας διαφορετικές μεθόδους κρυπτογράφησης και κωδικούς πρόσβασης. Αν και αυτό ενισχύει την ασφάλεια των δεδομένων, αλλά περιπλέκει τη διαδικασία διαχείρισης και αποκρυπτογράφησης αρχείων

Κρυπτογράφηση ZIP με διαφορετικές μεθόδους και κωδικούς πρόσβασης

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

Αυτός ο κώδικας δημιουργεί ένα αρχείο ZIP που περιέχει τρία κρυπτογραφημένα αρχεία: "alice29.txt", "asyoulik.txt" και "fields.c". Κάθε αρχείο είναι κρυπτογραφημένο με μια ξεχωριστή μέθοδο.
Το πρώτο μέρος αντικατοπτρίζει τη λειτουργικότητα του προηγούμενου παραδείγματος κώδικα. Η βασική ενότητα εστιάζει στη δημιουργία καταχωρήσεων μέσα στο αρχείο για κάθε αρχείο. Αυτές οι εγγραφές αναφέρονται στα ονόματά τους και τα αρχεία προέλευσης (Αντικείμενα αρχείου). Η κρυπτογράφηση εφαρμόζεται με διάφορες μεθόδους:

  • "alice29.txt" : Κρυπτογράφηση AES-256 με τον κωδικό πρόσβασης "p@s$S"
  • "asyoulik.txt" : Παραδοσιακό μέθοδος κρυπτογράφησης με τον κωδικό πρόσβασης "p@s$D"
  • "fields.c" : Κρυπτογράφηση AES-256 με τον κωδικό πρόσβασης "p@s$F"
Το τελευταίο μέρος αποθηκεύει το αρχείο και περιλαμβάνει χειρισμό σφαλμάτων για να σας ειδοποιεί για τυχόν προβλήματα κατά τη διάρκεια της διαδικασίας.

Κρυπτογράφηση υπάρχοντος αρχείου 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);
    }

Αυτός ο κώδικας παίρνει ένα υπάρχον αρχείο "plain.zip", εφαρμόζει κρυπτογράφηση AES σε αυτό με τον κωδικό πρόσβασης "p@s$S" και το αποθηκεύει ως νέο αρχείο με το όνομα "encrypted.zip"

Αποκρυπτογράφηση αρχείου ZIP με κωδικό πρόσβασης

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

Αυτός ο κώδικας εξάγει την πρώτη καταχώρηση από το αρχείο "source.zip" και την αποθηκεύει ως αρχείο με το όνομα "first_entry.bin" χρησιμοποιώντας τον κωδικό πρόσβασης "p@s$S".
Ο χρήστης έχει την επιλογή να αποκρυπτογραφήσει είτε μια συγκεκριμένη καταχώρηση εντός του κρυπτογραφημένου αρχείου ZIP είτε ολόκληρο το αρχείο ως σύνολο.

Αποκρυπτογραφήστε ολόκληρο το αρχείο ZIP

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

Σε αυτήν την περίπτωση πρέπει να δώσουμε κωδικό πρόσβασης σε έναν κατασκευαστή.

Κρυπτογράφηση/Αποκρυπτογράφηση αρχείου RAR με Java

Το Aspose.ZIP δεν παρέχει λειτουργικότητα για τη δημιουργία αρχείων RAR ; υποστηρίζει αποκλειστικά την εξαγωγή. Ένα αρχείο RAR μπορεί να κρυπτογραφηθεί, με την επιλογή προστασίας ονομάτων αρχείων ή όχι.
Στο προηγούμενο σενάριο, ο χρήστης πρέπει να παρέχει τον κωδικό αποκρυπτογράφησης εντός του αντικειμένου RarArchiveLoadOptions κατά την προετοιμασία του Αρχείο RAR. Στην τελευταία περίπτωση, ο κωδικός πρόσβασης μπορεί να παρέχεται κατά την εξαγωγή μεμονωμένων καταχωρήσεων.

Αποκρυπτογραφήστε το αρχείο RAR με κρυπτογραφημένα ονόματα αρχείων

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

Αυτός ο κώδικας αποκρυπτογραφεί και εξάγει τα περιεχόμενα του αρχείου "source.rar" στο φάκελο "destination". Εάν το αρχείο είναι κρυπτογραφημένο, χρησιμοποιεί τον καθορισμένο κωδικό αποκρυπτογράφησης.
Ακολουθεί μια ανάλυση του τρόπου λειτουργίας του:

  • Φόρτωση ρυθμίσεων με κωδικό αποκρυπτογράφησης: Αρχικά, δημιουργεί ένα αντικείμενο ρυθμίσεων φόρτωσης για το Αρχειοθέτηση RAR χρησιμοποιώντας τον τελεστή επιλογών RarArchiveLoadOptions. Στη συνέχεια ορίζει τον κωδικό αποκρυπτογράφησης για το αρχείο χρησιμοποιώντας τη μέθοδο options.setDecryptionPassword.
  • Άνοιγμα κρυπτογραφημένου αρχείου: Η επόμενη γραμμή ανοίγει το αρχείο "source.rar" για ανάγνωση και επεξεργασία χρησιμοποιώντας ένα Κατασκευή try-with-resources. Καθορίζει το αντικείμενο επιλογών με τον κωδικό αποκρυπτογράφησης για το χειρισμό κρυπτογραφημένων αρχείων.
  • Εξαγωγή περιεχομένων αρχείου: Τέλος, η μέθοδος archive.extractToDirectory εξάγει τα περιεχόμενα του αποκρυπτογραφημένου αρχείου στον "προορισμό" φάκελο.

Στοχευμένη αποκρυπτογράφηση αρχείου RAR

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

Αυτό το απόσπασμα κώδικα επιχειρεί να εξαγάγει την πρώτη καταχώρηση από το αρχείο RAR "source.rar" και να την αποθηκεύσει ως "first_entry.bin", χρησιμοποιώντας τον κωδικό αποκρυπτογράφησης "p@s$S" εάν το αρχείο είναι κρυπτογραφημένο.

Αποκρυπτογράφηση συγκεκριμένου περιεχομένου εισαγωγής RAR (Ροή)

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

Αυτό το απόσπασμα κώδικα στοχεύει μια συγκεκριμένη καταχώρηση σε ένα αρχείο RAR. Αποκρυπτογραφεί το περιεχόμενο της καταχώρισης και το μεταδίδει απευθείας στη μνήμη, υποθέτοντας ότι κρυπτογραφούνται μόνο τα δεδομένα καταχώρισης, όχι τα ίδια τα ονόματα των αρχείων.
Πλήρης περιγραφή του τι κάνει ο κώδικας:

  • Εκκίνηση του buffer μνήμης : Ένας προορισμός με όνομα ByteArrayOutputStream δημιουργείται για να χρησιμεύσει ως buffer στη μνήμη για την αποθήκευση του αποκρυπτογραφημένου περιεχομένου της στοχευμένης καταχώρισης.
  • Πρόσβαση σε αρχείο και καταχώριση: Ο κώδικας χρησιμοποιεί μια δοκιμή-με -αποκλείστε τους πόρους για να ανοίξετε το αρχείο RAR πηγής "source.rar". Μέσα σε ένα άλλο μπλοκ try-with-resources, ανακτά μια ροή εισόδου για τη δεύτερη καταχώρηση και την αποκρυπτογραφεί χρησιμοποιώντας τον κωδικό πρόσβασης "p@s$S".
  • Αποκρυπτογράφηση και ροή: Τα αποκρυπτογραφημένα byte διαβάζονται από τη ροή εισόδου σε κομμάτια χρησιμοποιώντας μια προσωρινή μνήμη . Στη συνέχεια, κάθε κομμάτι γράφεται στον προορισμό ByteArrayOutputStream έως ότου υποβληθούν σε επεξεργασία όλα τα δεδομένα.
  • Χειρισμός σφαλμάτων: Ο κώδικας ενσωματώνει ένα μπλοκ catch για χειρισμό. τυχόν πιθανές Εξαιρέσεις IO που μπορεί να προκύψουν κατά τη διαδικασία αποκρυπτογράφησης ή ροής. Εάν παρουσιαστεί σφάλμα, το μήνυμα σφάλματος εκτυπώνεται στην τυπική ροή σφαλμάτων για σκοπούς εντοπισμού σφαλμάτων.

Κρυπτογράφηση και αποκρυπτογράφηση αρχείου 7-ZIP με Java

Θα υλοποιηθεί στο Aspose.ZIP για την έκδοση Java 24.4. Η μόνη επιλογή κρυπτογράφησης αρχείου 7z είναι το AES.

Κρυπτογράφηση και συμπίεση αρχείου 7-Zip με 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 archives υποστηρίζει τη δυνατότητα κρυπτογράφησης κάθε καταχώρησης με τον δικό του κωδικό πρόσβασης ή αφαίρεσης απροστάτευτης. Αυτός ο κώδικας δημιουργεί ένα νέο αρχείο 7z με συμπίεση και κρυπτογράφηση LZMA2 και AES.

  • Άνοιγμα αρχείου: Ένα FileStream χρησιμοποιείται για να ανοίξει ένα νέο αρχείο με το όνομα "archive.7z" στη λειτουργία δημιουργίας.
  • Αρχικοποίηση αντικειμένων: Δημιουργούνται τρία αντικείμενα FileInfo για τα αρχεία "alice29.txt", "asyoulik.txt" και "fields.c".
  • Δημιουργία αρχείου 7 zip: Το αντικείμενο SevenZipArchive δημιουργείται με:
    - LZMA2 ρυθμίσεις συμπίεσης.
    - Ρυθμίσεις κρυπτογράφηση AES χρησιμοποιώντας τον κωδικό πρόσβασης "p@s$S"
  • Προσθήκη αρχείων: Οι μέθοδοι CreateEntry χρησιμοποιούνται για την προσθήκη κάθε αρχείου στο αρχείο από ξεχωριστό πηγή.
  • Αποθήκευση του αρχείου: Το αρχείο αποθηκεύεται στη ροή του αρχείου szFile χρησιμοποιώντας τη μέθοδο Αποθήκευση.

Επιλεκτική κρυπτογράφηση σε Αρχείο 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);
        }
    }

Αυτός ο κώδικας δημιουργεί ένα αρχείο 7z που περιέχει τρία αρχεία: "alice29.txt", "asyoulik.txt" και "fields.c". Τα δύο τελευταία αρχεία συμπιέζονται και κρυπτογραφούνται χρησιμοποιώντας διαφορετικούς κωδικούς πρόσβασης.
Σε αντίθεση με τον προηγούμενο κώδικα, η μέθοδος archive.CreateEntry χρησιμοποιείται στο αντικείμενο αρχειοθέτησης για τη δημιουργία καταχωρήσεων για κάθε αρχείο. Κατά τη δημιουργία της καταχώρησης για το "asyoulik.txt" από το αντικείμενο source2 FileInfo, η τρίτη παράμετρος του CreateEntry ορίζεται σε false. Αυτό υποδεικνύει ότι θα χρησιμοποιηθούν προσαρμοσμένες ρυθμίσεις συμπίεσης και κρυπτογράφησης, που ορίζονται στην τέταρτη παράμετρο (ένα αντικείμενο SevenZipEntrySettings). Σε αυτήν την περίπτωση, οι ρυθμίσεις καθορίζουν τη συμπίεση "Zip LZMA2" και την κρυπτογράφηση "Zip AES" με τον κωδικό πρόσβασης "p@s$S".
Όπως και το ZIP, ο χρήστης μπορεί να αποκρυπτογραφήσει είτε ολόκληρο το αρχείο είτε συγκεκριμένη καταχώρηση από αυτό.
Αρχείο 7Z μπορεί να κρυπτογραφηθεί με ή χωρίς προστασία ονόματα αρχείων. Εάν τα ονόματα αρχείων είναι κρυπτογραφημένα, θα πρέπει να δώσετε κωδικό πρόσβασης στην εγκατάσταση αρχειοθέτησης .

7z Αποκρυπτογράφηση με κρυπτογραφημένα ονόματα αρχείων

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

Αυτός ο κώδικας χρησιμοποιεί ένα μπλοκ try-with-resources για να ανοίξει ένα αρχείο 7z με το όνομα "archive.7z" που προστατεύεται με τον κωδικό πρόσβασης "p@s$S". Στη συνέχεια εξάγει τα περιεχόμενα του αρχείου στο φάκελο "C:\extracted".
Είτε τα ονόματα αρχείων είναι κρυπτογραφημένα είτε όχι, είναι ασφαλές να παρέχετε κωδικό πρόσβασης στον κατασκευαστή εξαγωγής. Το παρακάτω δείγμα θα λειτουργεί μόνο όταν προστατεύεται μόνο το περιεχόμενο.

Αποκρυπτογράφηση συγκεκριμένης καταχώρησης 7z

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

Αυτός ο κώδικας χρησιμοποιεί ένα μπλοκ try-with-resources για να ανοίξει ένα αρχείο 7z με το όνομα "archive.7z" που προστατεύεται με τον κωδικό πρόσβασης "p@s$S". Στη συνέχεια εξάγει τα περιεχόμενα του αρχείου στο φάκελο "C:\extracted".
Είτε τα ονόματα αρχείων είναι κρυπτογραφημένα είτε όχι, είναι ασφαλές να παρέχετε κωδικό πρόσβασης στον κατασκευαστή εξαγωγής. Το παρακάτω δείγμα θα λειτουργεί μόνο όταν προστατεύεται μόνο το περιεχόμενο.

Άλλο υποστηριζόμενο API συμπίεσης Java

Χρησιμοποιήστε τη βιβλιοθήκη Java Aspose.ZIP για μετατροπή, συγχώνευση, επεξεργασία εγγράφων αρχείων zip, εξαγωγή δεδομένων από τα αρχεία και πολλά άλλα!

  

Support and Learning Resources

  
  

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