概述
資料安全在當今的數位環境中至關重要,保護敏感資訊的有效方法之一是加密。本概述將指導您如何加密或解密整個存檔或其中的特定條目,確保資料的機密性和完整性。 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$");
}
其他支援的 Aspose.ZIP for .NET API 功能
使用 Aspose.ZIP C# 庫來轉換、合併、編輯 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 .NET?
- Customers List
- Success Stories