Ringkasan

Aspose.ZIP memfasilitasi sejumlah operasi yang berkaitan dengan enkripsi dan dekripsi arsip. Menggunakan Aspose.Zip API untuk Java, Anda dapat dengan cepat Mengenkripsi dan Mendekripsi arsip ZIP, RAR, 7-Zip.

Enkripsi/Dekripsi File ZIP

Ada dua metode enkripsi yang tersedia untuk arsip ZIP : metode tradisional, yang kini dianggap lemah, dan metode AES modern. Standar ZIP memungkinkan entri apa pun dienkripsi dengan metode mana pun, bahkan dalam arsip ZIP yang sama. Enkripsi AES menawarkan keamanan yang lebih kuat dan tersedia dalam panjang kunci yang berbeda (128-bit, 192-bit, dan 256-bit). Ini memberikan perlindungan yang lebih baik untuk data sensitif yang disimpan dalam arsip ZIP.

Enkripsi ZIP dengan metode 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());
    }

Kode ini membuat arsip ZIP bernama "archive.zip" menggunakan metode kompresi Deflate dan enkripsi ZIP tradisional. Ini mencapai hal ini dengan terlebih dahulu membuka aliran keluaran baru untuk arsip menggunakan coba FileOutputStream. Sumber FileInputStream berfungsi sebagai aliran input untuk file sumber "alice29.txt" yang akan ditambahkan ke arsip. Selanjutnya, objek Arsip dibuat, menentukan metode kompresi Deflate dan enkripsi tradisional. Kata sandi untuk enkripsi diatur ke "p@s$S". Pernyataan catch menangani pengecualian apa pun yang mungkin muncul selama operasi file atau arsip, mencetak pesan kesalahan ke konsol.

Mengenkripsi ZIP dengan metode 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());
    }

Kode ini membuat arsip ZIP bernama "archive.zip" menggunakan metode kompresi Deflate dan mengenkripsi data dengan algoritma AES-256 yang kuat.
Untuk sampel ini, kami menyediakan instance EncryptionSetting dalam Konstruktor Arsip . Dimungkinkan untuk menerapkan enkripsi untuk entri tertentu sehingga entri lainnya tidak terlindungi.

Dengan menggunakan algoritma enkripsi ZIP, enkripsi entri kedua dari tiga entri

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

Kode ini menunjukkan pembuatan arsip ZIP dengan tiga file input: "alice29.txt", "asyoulik.txt", dan "fields.c". Uniknya, file pertama dan terakhir ditambahkan tanpa terenkripsi, sedangkan file kedua, "asyoulik.txt", dilindungi kata sandi menggunakan enkripsi AES-256 dengan kata sandi "p@s$S".
Pendekatan enkripsi selektif ini file dalam arsip ZIP jarang terjadi. Namun, Aspose.Zip API untuk Java menyediakan fungsionalitas untuk mengenkripsi entri tertentu dalam arsip ZIP menggunakan metode enkripsi dan kata sandi yang berbeda. Meskipun hal ini meningkatkan keamanan data, namun mempersulit proses pengelolaan arsip dan dekripsi

Enkripsi ZIP dengan metode dan kata sandi yang berbeda

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

Kode ini membuat arsip ZIP yang berisi tiga file terenkripsi: "alice29.txt", "asyoulik.txt", dan "fields.c". Setiap file dienkripsi dengan metode berbeda.
Bagian pertama mencerminkan fungsionalitas contoh kode sebelumnya. Bagian inti berfokus pada pembuatan entri dalam arsip untuk setiap file. Entri ini merujuk pada nama dan file sumbernya (objek File). Enkripsi diterapkan dengan berbagai metode:

  • "alice29.txt" : Enkripsi AES-256 dengan kata sandi "p@s$S"
  • "asyoulik.txt" : Tradisional metode enkripsi dengan kata sandi "p@s$D"
  • "fields.c" : Enkripsi AES-256 dengan kata sandi "p@s$F"
Bagian terakhir menyimpan arsip dan menyertakan penanganan kesalahan untuk memberi tahu Anda tentang masalah apa pun selama proses tersebut.

Enkripsi Arsip ZIP yang Ada

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

Kode ini mengambil arsip "plain.zip" yang ada, menerapkan enkripsi AES dengan kata sandi "p@s$S", dan menyimpannya sebagai arsip baru bernama "encrypted.zip"

Dekripsi File ZIP Dengan Kata Sandi

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

Kode ini mengekstrak entri pertama dari arsip "source.zip" dan menyimpannya sebagai file bernama "first_entry.bin" menggunakan kata sandi "p@s$S".
Pengguna memiliki opsi untuk mendekripsi entri tertentu dalam arsip ZIP terenkripsi atau seluruh arsip secara keseluruhan.

Dekripsi Seluruh File ZIP

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

Dalam hal ini kita perlu memberikan kata sandi dalam konstruktor.

Enkripsi/Dekripsi File RAR dengan Java

Aspose.ZIP tidak menyediakan fungsionalitas untuk membuat arsip RAR ; itu hanya mendukung ekstraksi. Arsip RAR dapat dienkripsi, dengan opsi untuk melindungi nama file atau tidak.
Dalam skenario sebelumnya, pengguna harus memberikan kata sandi dekripsi dalam objek RarArchiveLoadOptions pada inisialisasi Arsip RAR. Dalam kasus terakhir, kata sandi dapat diberikan selama ekstraksi entri individual.

Dekripsi file RAR dengan nama file terenkripsi

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

Kode ini mendekripsi dan mengekstrak isi arsip "source.rar" ke folder "tujuan". Jika arsip dienkripsi, ia akan menggunakan kata sandi dekripsi yang ditentukan.
Berikut rincian cara kerjanya:

  • Muat Pengaturan dengan Kata Sandi Dekripsi: Pertama, ia membuat objek pengaturan beban untuk Arsip RAR menggunakan operator opsi RarArchiveLoadOptions. Kemudian menetapkan kata sandi dekripsi untuk arsip menggunakan metode options.setDecryptionPassword.
  • Buka Arsip Terenkripsi: Baris berikutnya membuka arsip "source.rar" untuk membaca dan mengedit menggunakan coba-dengan-sumber daya konstruksi. Ini menentukan objek opsi dengan kata sandi dekripsi untuk menangani arsip terenkripsi.
  • Ekstrak Isi Arsip: Terakhir, metode archive.extractToDirectory mengekstrak konten arsip yang didekripsi ke "tujuan" folder.

File RAR Dekripsi yang Ditargetkan

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

Cuplikan kode ini mencoba mengekstrak entri pertama dari arsip RAR "source.rar" dan menyimpannya sebagai "first_entry.bin", menggunakan kata sandi dekripsi "p@s$S" jika arsip dienkripsi.

Mendekripsi Konten Entri RAR Tertentu (Streaming)

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

Cuplikan kode ini menargetkan entri tertentu dalam arsip RAR. Ini mendekripsi konten entri dan mengalirkannya langsung ke memori, dengan asumsi hanya data entri yang dienkripsi, bukan nama file itu sendiri.
Deskripsi lengkap tentang fungsi kode:

  • Inisialisasi Buffer Memori : Tujuan bernama ByteArrayOutputStream dibuat untuk berfungsi sebagai buffer dalam memori untuk menyimpan konten yang didekripsi dari entri yang ditargetkan.
  • Akses Arsip dan Entri: Kode ini menggunakan percobaan dengan -blok sumber daya untuk membuka arsip RAR sumber "source.rar". Di dalam blok coba-dengan-sumber daya lainnya, ia mengambil aliran masukan untuk entri kedua dan mendekripsinya menggunakan kata sandi "p@s$S".
  • Dekripsi dan Streaming: Byte yang didekripsi dibaca dari aliran input dalam potongan menggunakan buffer. Setiap potongan kemudian ditulis ke ByteArrayOutputStream tujuan hingga semua data diproses.
  • Penanganan Kesalahan: Kode ini menggabungkan blok tangkapan untuk ditangani segala potensi IOException yang mungkin timbul selama proses dekripsi atau streaming. Jika terjadi kesalahan, pesan kesalahan dicetak ke aliran kesalahan standar untuk tujuan debugging.

Enkripsi dan Dekripsi File 7-ZIP dengan Java

Akan diimplementasikan di Aspose.ZIP untuk versi Java 24.4. Satu-satunya opsi enkripsi arsip 7z adalah AES.

Enkripsi dan Kompres file 7-Zip dengan 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);
        }
    }

Arsip 7Z mendukung kemampuan untuk mengenkripsi setiap entri dengan kata sandinya sendiri atau membiarkannya tidak terlindungi. Kode ini membuat arsip 7z baru dengan kompresi dan enkripsi LZMA2 dan AES.

  • Pembukaan File: FileStream digunakan untuk membuka file baru bernama "archive.7z" dalam mode pembuatan.
  • Menginisialisasi Objek: Tiga objek FileInfo dibuat untuk file "alice29.txt", "asyoulik.txt", dan "fields.c".
  • Membuat file 7-zip: Objek SevenZipArchive dibuat dengan:
    - pengaturan kompresi LZMA2.
    - Pengaturan enkripsi AES menggunakan kata sandi "p@s$S"
  • Menambahkan File: Metode CreateEntry digunakan untuk menambahkan setiap file ke arsip dari yang terpisah sumber.
  • Menyimpan Arsip: Arsip disimpan ke aliran file szFile menggunakan metode Simpan.

Enkripsi Selektif di Arsip 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);
        }
    }

Kode ini membuat arsip 7z yang berisi tiga file: "alice29.txt", "asyoulik.txt", dan "fields.c". Dua file terakhir dikompresi dan dienkripsi menggunakan kata sandi yang berbeda.
Berbeda dengan kode sebelumnya, metode archive.CreateEntry digunakan pada objek arsip untuk membuat entri untuk setiap file. Saat membuat entri untuk "asyoulik.txt" dari objek source2 FileInfo, parameter ketiga CreateEntry disetel ke false. Ini menunjukkan bahwa pengaturan kompresi dan enkripsi khusus akan digunakan, yang ditentukan dalam parameter keempat (objek SevenZipEntrySettings). Dalam hal ini, pengaturan menentukan kompresi "Zip LZMA2" dan enkripsi "Zip AES" dengan kata sandi "p@s$S".
Mirip dengan ZIP, pengguna dapat mendekripsi seluruh arsip atau entri tertentu darinya.
arsip 7Z dapat dienkripsi dengan atau tanpa melindungi nama file. Jika nama file dienkripsi, Anda perlu memberikan kata sandi pada pembuatan arsip .

Dekripsi 7z dengan Nama File Terenkripsi

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

Kode ini menggunakan blok coba-dengan-sumber daya untuk membuka arsip 7z bernama "archive.7z" yang dilindungi dengan kata sandi "p@s$S". Kemudian mengekstrak isi arsip ke folder "C:\extracted".
Apakah nama file dienkripsi atau tidak, aman untuk memberikan kata sandi dalam mengekstraksi konstruktor. Contoh di bawah ini hanya akan berfungsi jika hanya konten yang dilindungi.

Mendekripsi Entri Tertentu 7z

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

Kode ini menggunakan blok coba-dengan-sumber daya untuk membuka arsip 7z bernama "archive.7z" yang dilindungi dengan kata sandi "p@s$S". Kemudian mengekstrak isi arsip ke folder "C:\extracted".
Apakah nama file dienkripsi atau tidak, aman untuk memberikan kata sandi dalam mengekstraksi konstruktor. Contoh di bawah ini hanya akan berfungsi jika hanya konten yang dilindungi.

  

Support and Learning Resources

  
  

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