概述

Aspose.ZIP 促進了許多與檔案加密和解密相關的操作。使用 Aspose.Zip API for Java,您可以快速加密和解密 ZIP、RAR、7-Zip 檔案。

加密/解密 ZIP 檔案

ZIP 檔案 有兩種可用的加密方法:傳統方法(現在被認為較弱)和現代 AES 方法。 ZIP 標準允許使用任一方法對任何條目進行加密,即使在同一 ZIP 檔案中也是如此。 AES 加密提供更強的安全性,並提供不同的金鑰長度(128 位元、192 位元和 256 位元)。這為 ZIP 存檔中儲存的敏感資料提供了更好的保護。

使用 Deflate 方法加密 ZIP

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

此程式碼使用 Deflate 壓縮方法和傳統 ZIP 加密建立一個名為「archive.zip」的 ZIP 檔案。它透過首先使用 FileOutputStream 為存檔開啟一個新的輸出流來實現此目的。 FileInputStream 來源用作將新增至檔案中的來源檔案「alice29.txt」的輸入流。接下來,建立一個 Archive 對象,指定 Deflate 壓縮方法和傳統加密。加密密碼設定為“p@s$S”。 catch 語句處理檔案或歸檔作業期間可能出現的任何異常,並將錯誤訊息列印到控制台。

使用 AES 方法加密 ZIP

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

此程式碼使用 Deflate 壓縮方法建立名為「archive.zip」的 ZIP 存檔,並使用強大的 AES-256 演算法加密資料。
對於這些範例,我們在對應的 Archive 建構子 。可以對特定條目套用加密,而使其他條目不受保護。

使用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 for 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」:使用密碼「p@s$S」進行 AES-256 加密
  • 「asyoulik.txt」:傳統密碼為「p@s$D」的加密方法
  • 「fields.c」:密碼為「p@s$F」的AES-256加密
最後部分保存存檔並包括錯誤處理,以通知您在此過程中出現的任何問題。

加密現有 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」存檔,使用密碼「p@s$S」對其套用 AES 加密,並將其另存為名為「encrypted.zip」的新存檔

使用密碼解密 ZIP 檔案

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

此程式碼從「source.zip」檔案中提取第一個條目,並使用密碼「p@s$S」將其儲存為名為「first_entry.bin」的檔案。
使用者可以選擇解密加密 ZIP 檔案中的特定條目或整個存檔。

解密整個 ZIP 檔

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

在這種情況下,我們需要在建構函數中提供密碼。

使用 Java 加密/解密 RAR 文件

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 存檔。然後,它使用 options.setDecryptionPassword 方法來設定存檔的解密密碼。它指定帶有解密密碼的選項物件來處理加密的存檔。夾。

定向解密RAR文件

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

此程式碼片段嘗試從“source.rar”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」對其進行解密。 *:解密的位元組使用緩衝區從輸入流中以區塊的形式讀取。程式碼包含一個catch 區塊來處理解密或流處理過程中可能出現的任何潛在 IOExceptions。如果發生錯誤,錯誤訊息將列印到標準錯誤流以用於偵錯目的。

使用 Java 加密和解密 7-ZIP 文件

將在Aspose.ZIP for Java 24.4版本中實作。唯一的 7z 存檔加密選項是 AES。

使用 LZMA2 加密和壓縮 7-Zip 文件

    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 檔案支援使用自己的密碼加密每個條目或不受保護。此程式碼使用 LZMA2 和 AES 壓縮和加密建立新的 7z 檔案。

  • 檔案開啟FileStream 用於在建立模式下開啟名為「archive.7z」的新檔案。
  • 初始化物件:為檔案「alice29.txt」、「asyoulik.txt」和「fields.c」建立三個FileInfo 物件。
  • 建立 7-zip 檔案SevenZipArchive 物件是使用以下內容建立的:
    - LZMA2 壓縮設定。
    - AES 加密 設定使用密碼「p@s$S」
  • 新增檔案CreateEntry 方法用於將每個檔案從單獨的資料夾新增至檔案中來源。
  • 儲存檔案:使用 Save 方法將檔案儲存到 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 方法用於存檔物件為每個檔案建立條目。當從 source2 FileInfo 物件建立「asyoulik.txt」條目時,CreateEntry 的第三個參數設定為 false。這表示將使用在第四個參數(SevenZipEntrySettings 物件)中定義的自訂壓縮和加密設定。在本例中,設定指定「Zip LZMA2」壓縮和「Zip AES」加密,密碼為「p@s$S」。
與ZIP 類似,使用者可以解密整個檔案或其中的特定條目。下進行加密檔名。如果檔案名稱已加密,則需要在存檔實例化時提供密碼( https://reference.aspose.com/zip/java/com.aspose.zip/sevenziparchive/#SevenZipArchive-java.lang.String-java . lang .String-)。

使用加密檔案名稱進行 7z 解密

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

此程式碼利用 try-with-resources 區塊開啟名為「archive.7z」的 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 區塊開啟名為「archive.7z」的 7z 存檔,並使用密碼「p@s$S」進行保護。然後,它將存檔的內容提取到“C:\extracted”資料夾。
無論檔案名稱是否加密,在擷取建構函式中提供密碼都是安全的。以下範例僅在僅保護內容時才有效。

  

Support and Learning Resources

  
  

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