Обзор

Безопасность данных имеет первостепенное значение в современном цифровом мире, и одним из эффективных способов защиты конфиденциальной информации является шифрование. Этот обзор расскажет вам, как зашифровать или расшифровать весь архив или отдельные записи в нем, гарантируя конфиденциальность и целостность ваших данных. 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);
            }
        }
    }

В этих примерах показано, как встроить экземпляры EncryptionSetting в соответствующий конструктор архива . Это позволяет выборочное шифрование отдельных записей, оставляя другие незашифрованными.

Зашифруйте вторую запись из трех в 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);
            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 может быть зашифрован с защитой имен файлов или без нее.
В первом случае пользователю необходимо указать пароль для расшифровки в RarArchiveLoadOptions в самом начале создания экземпляра архива RAR. В последнем случае можно передать пароль позже при извлечении записи.

Расшифровать весь архив 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 .

Зашифруйте и сжимайте весь архив 7z с помощью LZMA2.

Архивы 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 может быть зашифрован с защитой имен файлов или без нее. Если имена файлов зашифрованы, вам необходимо указать пароль при создании экземпляра архива .

    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 для .NET API

Используйте библиотеку Aspose.ZIP C# для преобразования, объединения, редактирования документов в виде zip-файлов, извлечения данных из архивов и многого другого!

  

Support and Learning Resources

  
  

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