概述

資料安全在當今的數位環境中至關重要,保護敏感資訊的有效方法之一是加密。本概述將指導您如何加密或解密整個存檔或其中的特定條目,確保資料的機密性和完整性。 Aspose.ZIP 促進了一系列與檔案加密和解密相關的操作。

如何加密或解密整個 ZIP 存檔

使用傳統方法加密 Zip 檔案

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

使用 Deflate 壓縮的文件

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new TraditionalEncryptionSettings("p@s$")));
            archive.CreateEntry("alice29.txt", source);
            archive.Save(zipFile);
        }
    }

使用 AES 方法加密整個檔案

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            using (var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256))))
            {
                archive.CreateEntry("alice29.txt", source);
                archive.Save(zipFile);
            }
        }
    }

這些範例顯示如何在對應的 Archive 建構子 。這使得可以對單一條目進行選擇性加密,而使其他條目保持不加密。

加密 Zip Archive 中三個條目中的第二個條目

    using (FileStream zipFile = File.Open(this.resultFile, FileMode.Create))
    {
        FileInfo source1 = new FileInfo("alice29.txt");
        FileInfo source2 = new FileInfo("asyoulik.txt");
        FileInfo source3 = new FileInfo("fields.c");

        using (var archive = new Archive())
        {
            archive.CreateEntry("alice29.txt", source1);
            archive.CreateEntry("asyoulik.txt", source2, false, new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256)));
            archive.CreateEntry("fields.c", source3);
            archive.Save(zipFile);
        }
    }

雖然這看起來很不傳統,但使用不同的加密方法和密碼來加密 ZIP 檔案中的特定條目確實是可行的。這種方法允許更細粒度和自訂的安全策略,其中單一檔案或檔案群組可以具有不同層級的保護。然而,值得注意的是,這種做法可能會使管理和解密過程變得複雜,並且與各種 ZIP 存檔工具的兼容性可能會有所不同。

使用不同的方法和密碼加密 Zip

    using (FileStream zipFile = File.Open(this.resultFile, FileMode.Create))
    {
        FileInfo source1 = new FileInfo("alice29.txt");
        FileInfo source2 = new FileInfo("asyoulik.txt");
        FileInfo source3 = new FileInfo("fields.c");

        using (var archive = new Archive())
        {
            archive.CreateEntry("alice29.txt", source1, false, new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$1", EncryptionMethod.AES256)));
            archive.CreateEntry("asyoulik.txt", source2, false, new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$2")));
            archive.CreateEntry("fields.c", source3, false, new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$3", EncryptionMethod.AES256)));
            archive.Save(zipFile);
        }
    }

Aspose.ZIP 可讓您為現有檔案新增加密,而無需完全重新打包內容。但是,請務必注意,存檔的所有條目都必須不受保護;否則,將引發異常。

加密現有 ZIP 檔案

    using (var archive = new Archive("plain.zip"))
    {
        archive.Save("encrypted.zip", new ArchiveSaveOptions() 
        { 
            EncryptionOptions = new AesEcryptionSettings("p@s$", EncryptionMethod.AES256)
        });
    }

解密 Zip 檔案

使用者可以選擇解密加密 ZIP 存檔中的特定條目或整個存檔。

解密特定條目

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new TraditionalEncryptionSettings("p@s$")));
            archive.CreateEntry("alice29.txt", source);
            archive.Save(zipFile);
        }
    }

解密整個 Zip 檔案

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

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            using (var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256))))
            {
                archive.CreateEntry("alice29.txt", source);
                archive.Save(zipFile);
            }
        }
    }

如何加密或解密 RAR 存檔

解密 RAR 存檔

Aspose.ZIP不支援RAR壓縮包合成,它只支援萃取。 RAR 檔案 可以在保護或不保護檔案名稱的情況下進行加密。
在前一種情況下,使用者需要在RAR 檔案實例化的一開始就在 RarArchiveLoadOptions 中提供解密密碼。在後一種情況下,可以稍後在條目提取時傳遞密碼。

使用加密的檔案名稱解密整個 RAR 存檔

    using (RarArchive archive = new RarArchive("source.rar", 
    new RarArchiveLoadOptions() { DecryptionPassword = "p@s$" }))
    {
        archive.ExtractToDirectory("destination");
    }

解密 RAR 存檔中的特定條目

如果僅加密條目內容但不加密檔案名,則此範例將起作用。

    using (RarArchive archive = new RarArchive("source.rar"))
    {
        archive.Entries[0].Extract("first_entry.bin", "p@s$");
    }

將 RAR 存檔中的特定條目作為流解密

但是,在 此範例 中,假設僅加密條目的內容,而不加密檔案名稱。這需要將條目位元組複製到記憶體流。

    MemoryStream destination = new MemoryStream();
    using (RarArchive archive = new RarArchive("source.rar"))
    {
        using (var source = archive.Entries[1].Open("p@s$"))
        {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0)
            {
                destination.Write(buffer, 0, bytesRead);
            }
        }
    }

如何加密或解密整個 7ZIP 存檔

加密 7z 存檔檔案的方法

7z 存檔加密的唯一選項是 AES

使用 LZMA2 加密並壓縮整個 7z 存檔

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(new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("p@s$"))))
        {
            archive.CreateEntry("alice29.txt", source1);
            archive.CreateEntry("asyoulik.txt", source2);
            archive.CreateEntry("fields.c", source3);
            archive.Save(szFile);
        }
    }

使用自己的密碼加密 7z 存檔的條目,並保留一個條目不加密

與 ZIP 類似,使用者可以解密整個存檔或其中的特定條目。
7Z 檔案可以在有或沒有保護檔案名稱的情況下進行加密。如果檔案名稱已加密,則需要在檔案實例化時提供密碼( https://reference.aspose.com/zip/net/aspose.zip.sevenzip/sevenziparchive/sevenziparchive/#sevenziparchive-constructor-2-of- 4 )。

    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$")));
            archive.CreateEntry("fields.c", source3, false, new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("$ecret")));
            archive.Save(szFile);
        }
    }

將帶有加密檔案名稱的整個存檔解密到目錄中

無論檔案名稱是否加密,在提取建構函式中提供密碼都是安全的。
以下範例僅在僅保護內容時才有效。

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

解密特定條目

    using (SevenZipArchive archive = new SevenZipArchive("archive.7z"))
    {
        archive.Entries[0].Extract("data.bin", "p@s$");
    }
  

Support and Learning Resources

  
  

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