ภาพรวม
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
- Learning Resources
- Documentation
- Source Code
- API References
- Tutorial Videos
- Product Support
- Free Support
- Paid Support
- Blog
- Release Notes
- Why Aspose.ZIP for Java?
- Customers List
- Success Stories