Защита архивов паролем
API Aspose.ZIP позволяет сжимать и распаковывать файлы на C# или любом языке .NET, не беспокоясь о базовой файловой структуре. В этой статье приведены примеры реализации защиты паролем с использованием как традиционных схем шифрования, так и схем шифрования AES. Кроме того, показано, как работать с каталогами и сжимать несколько файлов с использованием смешанных методов шифрования.
Защита паролем с традиционным шифрованием
Aspose.ZIP обеспечивает традиционную защиту паролем для сжатых файлов. Используя простой пароль, вы можете защитить отдельные файлы или целые каталоги в архиве, гарантируя, что только авторизованные пользователи смогут извлечь содержимое.
Шифрование файлов с помощью традиционной схемы шифрования
Зашифруйте файлы, используя более простой традиционный метод шифрования. Этот подход обеспечивает базовую защиту архивов паролем, гарантируя, что файлы надежно сжимаются, оставаясь при этом доступными благодаря использованию правильного пароля.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream zipFile = File.Open(dataDir + "CompressWithTraditionalEncryption_out.zip", FileMode.Create))
3 {
4 using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
5 {
6 var archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$")));
7 archive.CreateEntry("alice29.txt", source1);
8 archive.Save(zipFile);
9 }
10 }
Шифрование файлов с помощью шифрования AES
Aspose.ZIP для .NET предоставляет возможности шифрования, которые помогут вам защитить конфиденциальные файлы в архивах. API поддерживает шифрование AES, предлагая несколько размеров ключей (128-бит, 192-бит и 256-бит) для различных уровней безопасности. С помощью этих методов шифрования вы можете быть уверены, что ваши данные хорошо защищены и доступны только авторизованным пользователям.
Шифрование файлов с помощью AES128
Aspose.ZIP для .NET предоставляет возможности шифрования, которые помогут вам защитить конфиденциальные файлы в архивах. API поддерживает шифрование AES, предлагая несколько размеров ключей (128-бит, 192-бит и 256-бит) для различных уровней безопасности. С помощью этих методов шифрования вы можете быть уверены, что ваши данные хорошо защищены и доступны только авторизованным пользователям. Вот пример того, как это делается.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream zipFile = File.Open(dataDir + "PasswordProtectWithAES128_out.zip", FileMode.Create))
3 {
4 using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
5 {
6 using (var archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
7 {
8 archive.CreateEntry("alice29.txt", source1);
9 archive.Save(zipFile);
10 }
11 }
12 }
Шифрование файлов с помощью AES192
Шифрование AES192 обеспечивает более высокий уровень безопасности по сравнению с AES128, но с немного увеличенными затратами на шифрование. Этот метод подходит для сценариев, где требуется более надежная защита без слишком большого ущерба для производительности. Посмотрите следующий пример, чтобы понять его использование.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream zipFile = File.Open(dataDir + "PasswordProtectWithAES192_out.zip", FileMode.Create))
3 {
4 using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
5 {
6 using (var archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES192))))
7 {
8 archive.CreateEntry("alice29.txt", source1);
9 archive.Save(zipFile);
10 }
11 }
12 }
Шифрование файлов с помощью AES256
AES256 — самый надежный вариант шифрования, доступный в семействе AES, обеспечивающий максимальную безопасность. Он идеально подходит для защиты очень конфиденциальных данных, где требуется максимальная безопасность, даже если для шифрования и дешифрования требуется больше вычислительной мощности. См. пример ниже.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream zipFile = File.Open(dataDir + "PasswordProtectWithAES256_out.zip", FileMode.Create))
3 {
4 using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
5 {
6 using (var archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256))))
7 {
8 archive.CreateEntry("alice29.txt", source1);
9 archive.Save(zipFile);
10 }
11 }
12 }
Каталог, защищенный паролем
Помимо шифрования отдельных файлов, Aspose.ZIP позволяет защитить паролем целые каталоги. Это особенно полезно, когда вам нужно зашифровать несколько файлов одновременно, защитив все содержимое каталога одним паролем.
1// Полные примеры и файлы данных можно найти по адресу https://github.com/aspose-zip/Aspose.ZIP-for-.NET.
2используя (FileStream zipFile = File.Open(".\\all_corpus_encrypted_out.zip", FileMode.Create))
3{
4 DirectoryInfo corpus = новый DirectoryInfo(".\\CanterburyCorpus");
5 используя (var archive = новый Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
6 {
7 archive.CreateEntries(корпус);
8 архив.Сохранить(zipFile);
9 }
10}
Шифрование нескольких файлов с помощью смешанных методов шифрованияAPI также поддерживает использование различных методов шифрования в одном архиве. Это позволяет применять сочетание алгоритмов шифрования, таких как AES и традиционную защиту паролем, к различным файлам в зависимости от их конфиденциальности и требований безопасности. Такая гибкость обеспечивает более детальный контроль над защитой файлов в архиве. Взгляните на этот пример, чтобы увидеть, как это работает на практике.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream zipFile = File.Open(dataDir + "CompressWithTraditionalEncryption_out.zip", FileMode.Create))
3 {
4 using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
5 {
6 var archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$")));
7 archive.CreateEntry("alice29.txt", source1);
8 archive.Save(zipFile);
9 }
10 }
Распаковка файлов, защищенных паролем
После шифрования архивов вам также необходимо знать, как расшифровать и извлечь файлы при необходимости. Aspose.ZIP упрощает распаковку архивов, защищенных паролем, независимо от того, использовалось ли традиционное шифрование или AES. Вы можете извлекать файлы по отдельности или распаковывать весь зашифрованный каталог.
Распаковка архивов, традиционно защищенных паролем
Легко извлекайте файлы, защищенные традиционным паролем. Этот метод обрабатывает архивы, защищенные с использованием старых методов шифрования, обеспечивая доступ к вашим данным после предоставления правильного пароля.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream fs = File.OpenRead(dataDir + "CompressWithTraditionalEncryption_out.zip"))
3 {
4 using (var extracted = File.Create(dataDir + "alice_extracted_out.txt"))
5 {
6 using (Archive archive = new Archive(fs, new ArchiveLoadOptions() { DecryptionPassword = "p@s$" }))
7 {
8 using (var decompressed = archive.Entries[0].Open())
9 {
10 byte[] b = new byte[8192];
11 int bytesRead;
12 while (0 < (bytesRead = decompressed.Read(b, 0, b.Length)))
13 {
14 extracted.Write(b, 0, bytesRead);
15 }
16 }
17 }
18 }
19 }
Распаковка архивов, зашифрованных AES
В этом разделе рассказывается, как извлечь файлы, зашифрованные с помощью AES, одного из наиболее безопасных стандартов шифрования. Независимо от того, имеете ли вы дело с AES128, AES192 или AES256, процесс извлечения прост, если предоставлен правильный ключ дешифрования.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream fs = File.OpenRead(dataDir + "PasswordProtectWithAES256_out.zip"))
3 {
4 using (var extracted = File.Create(dataDir + "alice_aesextracted_out.txt"))
5 {
6 using (Archive archive = new Archive(fs))
7 {
8 using (var decompressed = archive.Entries[0].Open("p@s$"))
9 {
10 byte[] b = new byte[8192];
11 int bytesRead;
12 while (0 < (bytesRead = decompressed.Read(b, 0, b.Length)))
13 {
14 extracted.Write(b, 0, bytesRead);
15 }
16 }
17 }
18 }
19 }
Распаковка сохраненного архива, зашифрованного AES
Извлекайте файлы из зашифрованного архива и храните его без сжатия. Этот процесс гарантирует, что даже несжатые файлы останутся в безопасности, защищая конфиденциальные данные и сохраняя при этом исходную файловую структуру.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream fs = File.OpenRead(dataDir + "StoreMutlipleFilesWithoutCompressionWithPassword_out.zip"))
3 {
4 using (var extracted = File.Create(dataDir + "alice_aesextracted_out.txt"))
5 {
6 using (Archive archive = new Archive(fs, new ArchiveLoadOptions() { DecryptionPassword = "p@s$" }))
7 {
8 using (var decompressed = archive.Entries[0].Open())
9 {
10 byte[] b = new byte[8192];
11 int bytesRead;
12 while (0 < (bytesRead = decompressed.Read(b, 0, b.Length)))
13 {
14 extracted.Write(b, 0, bytesRead);
15 }
16 }
17 }
18 }
19 }
Распаковать зашифрованную папку в каталог
Извлеките целые зашифрованные каталоги обратно в исходную структуру папок. Этот процесс восстанавливает все файлы из зашифрованного архива в указанный каталог, сохраняя при этом их исходную иерархию и безопасность, при условии, что используется правильный ключ дешифрования.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream zipFile = File.Open(".\\all_corpus_encrypted.zip", FileMode.Open))
3 {
4 new Archive(zipFile, new ArchiveLoadOptions() { DecryptionPassword = "p@s$" }).ExtractToDirectory(".\\all_corpus_decrypted");
5 }
Распаковка архивов
Aspose.ZIP для .NET предлагает простой в использовании API для распаковки архивов, независимо от того, содержат ли они один файл, несколько файлов или даже сохраненные файлы без сжатия. В этом разделе демонстрируются различные сценарии распаковки и предлагаются эффективные решения для извлечения сжатых данных.
Распаковка архива, состоящего из одного файла
В сценариях, когда архив содержит только один файл, распаковка выполняется просто. Вы можете быстро и с минимальными затратами извлечь содержимое архива, гарантируя целостность исходных данных, используя следующий пример:
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream fs = File.OpenRead(dataDir + "CompressSingleFile_out.zip"))
3 {
4 using (Archive archive = new Archive(fs))
5 {
6 int percentReady = 0;
7 archive.Entries[0].ExtractionProgressed += (s, e) =>
8 {
9 int percent = (int)((100 * e.ProceededBytes) / ((ArchiveEntry)s).UncompressedSize);
10 if (percent > percentReady)
11 {
12 Console.WriteLine(string.Format("{0}% decompressed", percent));
13 percentReady = percent;
14 }
15 };
16 archive.Entries[0].Extract(dataDir + "alice_extracted_out.txt");
17 }
18 }
Распаковать архив, содержащий несколько файлов
При работе с архивами, содержащими несколько файлов, наш API упрощает процесс перебора записей и их эффективного извлечения. Отслеживание хода событий на основе событий во время извлечения особенно полезно для мониторинга больших задач по декомпрессии.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream zipFile = File.Open(dataDir + "CompressMultipleFiles_out.zip", FileMode.Open))
3 {
4 StringBuilder sb = new StringBuilder("Entries are: ");
5 int percentReady = 0;
6 using (Archive archive = new Archive(zipFile,
7 new ArchiveLoadOptions()
8 {
9 EntryListed = (s, e) => { sb.AppendFormat("{0}, ", e.Entry.Name); },
10 EntryExtractionProgressed = (s, e) =>
11 {
12 int percent = (int)((100 * e.ProceededBytes) / ((ArchiveEntry)s).UncompressedSize);
13 if (percent > percentReady)
14 {
15 Console.WriteLine(string.Format("{0}% compressed", percent)); percentReady = percent;
16 }
17 }
18 }))
19 {
20 Console.WriteLine(sb.ToString(0, sb.Length - 2));
21 using (var extracted = File.Create(dataDir + "alice_extracted_out.txt"))
22 {
23 using (var decompressed = archive.Entries[0].Open())
24 {
25 byte[] buffer = new byte[8192];
26 int bytesRead;
27 while (0 < (bytesRead = decompressed.Read(buffer, 0, buffer.Length)))
28 {
29 extracted.Write(buffer, 0, bytesRead);
30 }
31 // Read from decompressed stream to extracting file.
32 }
33 }
34 percentReady = 0;
35 archive.Entries[1].Extract(dataDir + "asyoulik_extracted_out.txt");
36 }
37 }
Извлечение сохраненного архива без сжатия
Сохраненные архивы, содержащие несжатые файлы, также поддерживаются API Aspose.Zip. Хотя эти архивы не уменьшают размер файла, они обеспечивают быстрый доступ и эффективное извлечение хранящихся данных. Это полезно, когда вам нужно упаковать файлы вместе, не меняя их структуру.
1 // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2 using (FileStream zipFile = File.Open(dataDir + "StoreMultipleFilesWithoutCompression_out.zip", FileMode.Open))
3 {
4 using (Archive archive = new Archive(zipFile))
5 {
6 using (var extracted = File.Create(dataDir + "alice_extracted_store_out.txt"))
7 {
8 using (var decompressed = archive.Entries[0].Open())
9 {
10 byte[] buffer = new byte[8192];
11 int bytesRead;
12 while (0 < (bytesRead = decompressed.Read(buffer, 0, buffer.Length)))
13 {
14 extracted.Write(buffer, 0, bytesRead);
15 }
16 // Read from decompressed stream to extracting file.
17 }
18 }
19
20 using (var extracted = File.Create(dataDir + "asyoulik_extracted_store_out.txt"))
21 {
22 using (var decompressed = archive.Entries[1].Open())
23 {
24 byte[] buffer = new byte[8192];
25 int bytesRead;
26 while (0 < (bytesRead = decompressed.Read(buffer, 0, buffer.Length)))
27 {
28 extracted.Write(buffer, 0, bytesRead);
29 }
30 // Read from decompressed stream to extracting file.
31 }
32 }
33 }
34 }