ภาพรวม

Aspose.ZIP อำนวยความสะดวกในการดำเนินการหลายอย่างที่เกี่ยวข้องกับการเข้ารหัสและการถอดรหัสไฟล์เก็บถาวร การใช้ Aspose.Zip API สำหรับ Java ทำให้คุณสามารถเข้ารหัสและถอดรหัสไฟล์ ZIP, RAR, 7-Zip ได้อย่างรวดเร็ว

เข้ารหัส / ถอดรหัสไฟล์ ZIP

มีวิธีการเข้ารหัสสองวิธีสำหรับ ZIP archives : วิธีดั้งเดิมซึ่งปัจจุบันถือว่าไม่ปลอดภัย และวิธีการ AES สมัยใหม่ มาตรฐาน ZIP อนุญาตให้เข้ารหัสรายการใดๆ ด้วยวิธีใดวิธีหนึ่ง แม้ว่าจะอยู่ในไฟล์ ZIP เดียวกันก็ตาม การเข้ารหัส AES ให้ความปลอดภัยที่แข็งแกร่งยิ่งขึ้น และสามารถใช้ได้ในความยาวคีย์ที่แตกต่างกัน (128 บิต, 192 บิต และ 256 บิต) สิ่งนี้ให้การป้องกันที่ดีกว่าสำหรับข้อมูลที่ละเอียดอ่อนที่จัดเก็บไว้ในไฟล์ 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 แบบเดิม บรรลุสิ่งนี้ได้ด้วยการเปิดสตรีมเอาต์พุตใหม่สำหรับไฟล์เก็บถาวรโดยใช้ลองใช้ 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" : Traditional วิธีการเข้ารหัสด้วยรหัสผ่าน "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" เพื่ออ่านและแก้ไขโดยใช้ ลองกับทรัพยากร สร้าง โดยจะระบุออบเจ็กต์ตัวเลือกด้วยรหัสผ่านถอดรหัสเพื่อจัดการไฟล์เก็บถาวรที่เข้ารหัส
  • แยกเนื้อหาไฟล์เก็บถาวร: สุดท้ายนี้ เมธอด 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 โดยจะถอดรหัสเนื้อหาของรายการและสตรีมลงในหน่วยความจำโดยตรง โดยถือว่าเฉพาะข้อมูลรายการเท่านั้นที่ถูกเข้ารหัส ไม่ใช่ชื่อไฟล์
คำอธิบายแบบเต็มว่าโค้ดทำอะไรได้บ้าง:

  • การเตรียมใช้งานบัฟเฟอร์หน่วยความจำ : ปลายทางที่มีชื่อ ByteArrayOutputStream ถูกสร้างขึ้นเพื่อทำหน้าที่เป็นบัฟเฟอร์ในหน่วยความจำสำหรับการจัดเก็บเนื้อหาที่ถอดรหัสของรายการเป้าหมาย
  • การเข้าถึงการเก็บถาวรและรายการ: โค้ดใช้การลองด้วย - บล็อกทรัพยากรเพื่อเปิดไฟล์เก็บถาวร RAR ต้นทาง "source.rar" ภายในบล็อก try-with-resources อื่น จะดึงสตรีมอินพุตสำหรับรายการที่สองและถอดรหัสโดยใช้รหัสผ่าน "p@s$S"
  • การถอดรหัสและการสตรีม: ไบต์ที่ถอดรหัส ถูกอ่านจากสตรีมอินพุตเป็นชิ้นๆ โดยใช้บัฟเฟอร์ จากนั้นแต่ละชิ้นจะถูกเขียนไปยังปลายทาง ByteArrayOutputStream จนกว่าข้อมูลทั้งหมดจะได้รับการประมวลผล
  • การจัดการข้อผิดพลาด: โค้ดรวม catch block ไว้เพื่อจัดการ IOExceptions ที่อาจเกิดขึ้นระหว่างกระบวนการถอดรหัสหรือสตรีมมิ่ง หากมีข้อผิดพลาดเกิดขึ้น ข้อความแสดงข้อผิดพลาดจะถูกพิมพ์ไปยังสตรีมข้อผิดพลาดมาตรฐานเพื่อวัตถุประสงค์ในการตรวจแก้จุดบกพร่อง

เข้ารหัสและถอดรหัสไฟล์ 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 รองรับความสามารถในการเข้ารหัสแต่ละรายการด้วยรหัสผ่านของตัวเองหรือปล่อยทิ้งไว้โดยไม่มีการป้องกัน รหัสนี้สร้างไฟล์เก็บถาวร 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 อื่นๆ ที่รองรับ

ใช้ไลบรารี Aspose.ZIP Java เพื่อแปลง ผสาน แก้ไขเอกสารไฟล์ zip แยกข้อมูลจากไฟล์เก็บถาวร และอื่นๆ อีกมากมาย!

  

Support and Learning Resources

  
  

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