概述

Aspose.ZIP 有助於檔案進行一系列加密和解密操作。使用適用於 Python.NET 的 Aspose.Zip API,您可以有效率地加密和解密 ZIP、RAR 和 7-Zip 檔案。

加密 ZIP 檔案

ZIP 檔案可使用兩種加密技術:較舊的、現在被認為不太安全的傳統方法,以及更強大的現代 AES 加密。 ZIP 標準允許使用任一方法對同一存檔中的各個條目進行加密。 AES 加密以其更強的安全性而聞名,支援各種金鑰長度,包括 128 位元、192 位元和 256 位元,為 ZIP 檔案中的敏感資料提供增強的保護。同一存檔中的每個條目都可以使用自己的加密進行加密,因此您可以在同一存檔中混合不同的加密類型。

使用 Deflate 方法解鎖 ZIP

    with open("archive.zip", 'x') as zip_file:
        with open("alice29.txt") as source:
            method =  zp.saving.CompressionSettings.deflate
            encryption = zp.saving.TraditionalEncryptionSettings("p@s$S")
            archive = zp.Archive(zp.saving.ArchiveEntrySettings(method, encryption))
            archive.create_entry("alice29.txt", source)
            archive.save(zip_file)

程式碼建立一個名為archive.zip的新ZIP文件,使用Deflate壓縮方法壓縮alice29.txt的內容,使用密碼「p@s$S」使用傳統ZIP加密方法對其進行加密,並保存壓縮加密後的內容檔案到新建立的 ZIP 檔案。

使用 AES 加密 ZIP

    with open("archive.zip", 'x') as zip_file:
        with open("alice29.txt") as source:
            method =  zp.saving.CompressionSettings.deflate
            encryption = zp.saving.AesEcryptionSettings("p@s$S", zp.saving.EncryptionMethod.AES256)
            archive = zp.Archive(zp.saving.ArchiveEntrySettings(method, encryption))
            archive.create_entry("alice29.txt", source)
            archive.save(zip_file)

提供的程式碼示範如何建立名為 archive.zip 的 ZIP 存檔,使用 Deflate 壓縮方法壓縮檔案 alice29.txt,並使用密碼「p@s$S」使用 AES-256 加密對其進行加密。對於這些範例,我們在對應的 Archive 建構子 中提供了 EncryptionSetting 的實例。可以對特定條目套用加密,而使其他條目不受保護。
這展示了對 ZIP 檔案中的特定條目套用加密的靈活性,允許不同的檔案具有不同的保護等級。這種方法允許更細粒度和自訂的安全策略,其中單一檔案或檔案群組可以具有不同層級的保護。然而,值得注意的是,這種做法可能會使管理和解密過程變得複雜,並且與各種 ZIP 存檔工具的兼容性可能會有所不同。

加密 ZIP 三項中的第二項

    with open("archive.zip", 'x') as zip_file:
        encrypted_entry = zp.saving.ArchiveEntrySettings(None, zp.saving.AesEcryptionSettings("p@s$", zp.saving.EncryptionMethod.AES256))
        with zp.Archive as archive:
            archive.create_entry("alice29.txt", "alice29.txt")
            archive.create_entry("asyoulik.txt", "asyoulik.txt", false, encrypted_entry)
            archive.create_entry("fields.c", "fields.c")
            archive.save(zip_file)

此程式碼示範如何在 Python 中建立受密碼保護的 ZIP 檔案。它添加了三個檔案:alice29.txt、asyoulik.txt 和 fields.c。
工作原理如下:
根據儲存在 this.resultFile 中的名稱開啟或建立 ZIP 存檔檔案。建立 FileInfo 物件來表示要新增的檔案。建立一個新的歸檔物件。
新增檔案: alice29.txt 和 fields.c 被加入到檔案中,無需任何特殊設定。 asyoulik.txt 新增了 AES-256 加密,需要密碼 p@s$ 進行解密。將完成的存檔儲存到指定檔案。

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

    with open("archive.zip", 'x') as zip_file:
        encrypted_1 = zp.saving.ArchiveEntrySettings(None, zp.saving.AesEcryptionSettings("p@s$1", zp.saving.EncryptionMethod.AES256))
        encrypted_2 = zp.saving.ArchiveEntrySettings(None, zp.saving.TraditionalEncryptionSettings("p@s$2"))
        encrypted_3 = zp.saving.ArchiveEntrySettings(None, zp.saving.AesEcryptionSettings("p@s$3", zp.saving.EncryptionMethod.AES128))
        with zp.Archive as archive:
            archive.create_entry("alice29.txt", "alice29.txt", false, encrypted_1)
            archive.create_entry ("asyoulik.txt", "asyoulik.txt", false, encrypted_2)
            archive.create_entry("fields.c", "fields.c", false, encrypted_3)
            archive.save(zip_file)

此程式碼片段示範了在 Python 中建立 ZIP 存檔,其中各個檔案使用不同的方法和密碼進行加密。其工作原理如下:
檔案設定: 根據儲存在 this.resultFile 中的名稱開啟或建立 ZIP 存檔檔案。建立代表要新增的檔案的 FileInfo 物件:alice29.txt、asyoulik.txt 和 fields.c。
建立存檔: 建立一個新的存檔物件(存檔)。
新增加密檔案: 程式碼使用循環遍歷檔案並將它們新增至具有特定加密設定的檔案:
alice29.txt - 此檔案新增有 ** AES-256 加密**並需要密碼「p@s」來解密。
asyoulik.txt - 此檔案新增了一種不同的加密方法,稱為 傳統加密。它還使用單獨的密碼“p@s”進行解密。
fields.c - 該檔案再次新增 AES-128 加密,但使用不同的密碼「p@s$3」進行解密。
儲存存檔: 最後,程式碼將包含加密檔案的完整存檔儲存到指定檔案中。

使用不同的方法和密碼加密 ZIP 存檔

    with zp.Archive("plain.zip") as archive:
        save_options = zp.saving.ArchiveSaveOptions()
        save_options.encryption_options = zp.saving.AesEcryptionSettings("p@s$", zp.saving.EncryptionMethod.AES256)
        archive.save("encrypted.zip",  save_options)

此程式碼採用現有 ZIP 檔案 plain.zip,使用 AES-256 和密碼 p@s$ 加密其內容,並將加密版本儲存為名為 encrypted.zip 的新檔案。

解密 ZIP 檔案

使用密碼解密 ZIP 檔案

    with zp.Archive("source.zip") as archive:
        archive.entries[0].extract("first_entry.bin", "p@s$")

使用者可以選擇解密加密 ZIP 存檔中的特定條目。此程式碼片段示範了從受密碼保護的 ZIP 檔案中解密第一個條目的基本方法。如果密碼正確,存檔將成功開啟。

解密整個 ZIP 檔

    load_options = zp.ArchiveLoadOptions()
    load_options.decryption_password = "p@s$S"
    with zp.Archive("source.zip", load_options) as archive:
        archive.extract_to_directory("destination")

這個簡單的程式碼採用受密碼保護的 ZIP 檔案“source.zip”,使用提供的密碼“p@s$S”進行解密,並將其所有內容提取到指定的資料夾“destination”。

解密RAR文件

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

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

    load_options = zp.rar.RarArchiveLoadOptions()
    load_options.decryption_password = "p@s$S"
    with zp.rar.RarArchive("source.rar", load_options) as archive:
        archive.extract_to_directory("destination")

本質上,此程式碼的功能與 ZIP 範例類似,但專門用於 RAR 存檔。它採用受密碼保護的 RAR 存檔“source.rar”,使用提供的密碼“p@s$S”進行解密,並將其所有內容提取到指定的資料夾“destination”。

解密 RAR 存檔中的特定條目

    with zp.rar.RarArchive("source.rar") as archive:
        archive.entries[0].extract("first_entry.bin", "p@s$S")

此程式碼開啟 source.rar RAR 存檔,使用密碼「p@s$S」解密並提取已存檔的第一個條目,並將其儲存到first_entry.bin 檔案中。如果僅加密條目內容但不加密檔案名,則此範例將起作用。

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

    with io.FileIO("file.bin", "xb") as destination:
        with zp.rar.RarArchive("source.rar") as archive:
            with archive.entries[0].open("p@s$S") as source:
                destination.write(source.readall())

此程式碼開啟 RAR 存檔 source.rar,使用密碼「p@s$S」解密已存檔的第二筆記錄,並將其內容讀入 ByteArrayOutputStream。透過使用讀取緩衝區,程式碼可確保漸進式資料傳輸,這有助於高效處理大檔案。如果僅加密條目內容但不加密檔案名,則此範例將起作用。在此範例中,條目位元組被複製到記憶體流。

使用 aes 256 進行 7zip 加密

7z 存檔加密的唯一選項是 AES 。此檔案利用 LZMA2 壓縮來有效減少檔案大小,並使用密碼進行 AES 加密來增加安全性。程式碼循環存取檔案並使用 CreateEntry 方法將它們新增至檔案。

加密並壓縮整個 7zip 檔案

    with open("archive.7z", 'xb') as sz_file:
        compression = zp.saving.SevenZipLZMA2CompressionSettings()
        encryption = zp.saving.SevenZipAESEncryptionSettings("p@s$S")
        entry_settings = zp.saving.SevenZipEntrySettings(compression, encryption) 
        with zp.sevenzip.SevenZipArchive(entry_settings) as archive:
            archive.create_entry("alice29.txt", "alice29.txt")
            archive.create_entry("asyoulik.txt", "asyoulik.txt")
            archive.create_entry("fields.c", "fields.c")
            archive.save(sz_file)

此程式碼會建立一個加密的 7z 存檔,其中包含三個檔案:alice29.txt、asyoulik.txt 和 fields.c。此檔案使用 LZMA2 壓縮和 AES 加密,密碼為「p@s$S」。使用 CreateEntry 方法將檔案新增至檔案中,並且將檔案儲存到已建立的 archive.7z 檔案中。

7z 使用密碼加密

    with open("archive.7z", 'xb') as sz_file:
        compression = zp.saving.SevenZipLZMA2CompressionSettings()
        entry_pass1 = zp.saving.SevenZipEntrySettings(compression, zp.saving.SevenZipAESEncryptionSettings("p@s$S"))
        entry_pass2 = zp.saving.SevenZipEntrySettings(compression, zp.saving.SevenZipAESEncryptionSettings("$ecret"))
        with zp.sevenzip.SevenZipArchive(entry_settings) as archive:
            archive.create_entry("alice29.txt", "alice29.txt")
            archive.create_entry("asyoulik.txt", "asyoulik.txt", false, entry_pass1)
            archive.create_entry("fields.c", "fields.c", false, entry_pass2)
            archive.save(sz_file)

此程式碼會建立一個加密的 7z 存檔,其中包含三個檔案:alice29.txt、asyoulik.txt 和 fields.c。第一個文件無需特殊設定即可新增至存檔。第二個檔案使用 LZMA2 壓縮和 AES 加密附加,密碼為「p@s$S」。第三個檔案是使用 LZMA2 壓縮和 AES 加密以及密碼「$ecret」附加的。最後,存檔被儲存到archive.7z 檔案中。
與 ZIP 類似,使用者可以解密整個存檔或其中的特定條目。 7Z 存檔可以在有或沒有保護檔案名稱的情況下進行加密。如果檔案名稱已加密,則需要在[檔案實例化]上提供密碼( https://reference.aspose.com/zip/net/aspose.zip.sevenzip/sevenziparchive/sevenziparchive/#sevenziparchive-constructor-2-of-4) .

解密 7ZIP 檔

使用加密的檔案名稱解密 7z 存檔

    with zp.sevenzip.SevenZipArchive("archive.7z", "p@s$S") as archive: 
        archive.extract_to_directory("c:\extracted")

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

解密 7zip 特定條目

with zp.sevenzip.SevenZipArchive("archive.7z") as archive:
    archive.entries[0].extract("data.bin", "p@s$S")

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

Python.Net API 支援的其他 Aspose.ZIP 功能

透過Python.Net中的Aspose.ZIP庫,您可以無縫處理與ZIP文件文件相關的各種任務。無論您需要轉換格式、合併文件、編輯內容或提取數據,Aspose.ZIP 都提供全面的功能來簡化您的工作流程並提高工作效率。

  

Support and Learning Resources

  
  

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