Visão geral

A segurança dos dados é fundamental no cenário digital atual e uma forma eficaz de proteger informações confidenciais é por meio da criptografia. Esta visão geral irá guiá-lo sobre como criptografar ou descriptografar um arquivo inteiro ou entradas específicas dentro dele, garantindo a confidencialidade e integridade dos seus dados. Aspose.ZIP facilita uma série de operações relacionadas à criptografia e descriptografia de arquivos.

Como criptografar ou descriptografar todo o arquivo ZIP

Criptografe o arquivo Zip com o método tradicional

Existem dois métodos de criptografia disponíveis para arquivos ZIP: tradicional, considerado fraco agora, e AES moderno. O padrão ZIP permite que qualquer entrada seja criptografada com qualquer um desses métodos, mesmo dentro do mesmo arquivo. A criptografia AES oferece segurança mais forte e está disponível em diferentes comprimentos de chave (128 bits, 192 bits e 256 bits). Ele fornece melhor proteção para dados confidenciais em arquivos ZIP.

Arquivos compactados com 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);
        }
    }

Criptografando todo o arquivo com o método 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);
            }
        }
    }

Esses exemplos mostram como incorporar instâncias de EncryptionSetting no construtor de arquivo . Isso permite a criptografia seletiva de entradas individuais, mantendo outras não criptografadas.

Criptografe a segunda entrada das três no 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);
        }
    }

Embora possa parecer pouco convencional, é realmente viável criptografar entradas específicas dentro de um arquivo ZIP usando diferentes métodos de criptografia e senhas. Essa abordagem permite uma estratégia de segurança mais granular e personalizada, onde arquivos individuais ou grupos de arquivos podem ter níveis distintos de proteção. No entanto, é importante notar que esta prática pode complicar o processo de gestão e desencriptação, e a compatibilidade com várias ferramentas de arquivo ZIP pode variar.

Criptografe Zip com diferentes métodos e senhas

    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 permite adicionar criptografia a um arquivo existente sem reembalar totalmente o conteúdo. Contudo, é importante notar que todas as entradas do arquivo devem estar desprotegidas; caso contrário, uma exceção será levantada.

Criptografar arquivo ZIP existente

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

Descriptografando um arquivo Zip

O usuário tem a opção de descriptografar uma entrada específica no arquivo ZIP criptografado ou o arquivo inteiro como um todo.

Descriptografar entrada específica

    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);
        }
    }

Descriptografar todo o arquivo Zip

Neste caso precisamos fornecer uma senha dentro de um construtor.

    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);
            }
        }
    }

Como criptografar ou descriptografar arquivo RAR

Descriptografando um arquivo RAR

Aspose.ZIP não oferece suporte à composição de arquivos RAR, apenas à extração. Arquivo RAR pode ser criptografado com ou sem proteção de nomes de arquivos.
No primeiro caso, o usuário precisa fornecer a senha de descriptografia em RarArchiveLoadOptions logo no início da instanciação do arquivo RAR. Neste último caso, é possível passar a senha posteriormente na extração da entrada.

Descriptografe todo o arquivo RAR com nomes de arquivos criptografados

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

Descriptografe uma entrada específica do arquivo RAR

Este exemplo funcionaria se apenas o conteúdo das entradas fosse criptografado, mas os nomes dos arquivos não.

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

Descriptografe uma entrada específica do arquivo RAR como um fluxo

No entanto, neste exemplo , a suposição é que apenas o conteúdo das entradas é criptografado, não os nomes dos arquivos . Isso exige a cópia dos bytes de entrada para um fluxo de memória.

    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);
            }
        }
    }

Como criptografar ou descriptografar todo o arquivo 7ZIP

Métodos para criptografar arquivos 7z

A única opção de criptografia de arquivo 7z é AES .

Criptografar e compactar com LZMA2 todo o arquivo 7z

Os arquivos 7Z suportam a capacidade de criptografar cada entrada com sua própria senha ou deixá-la desprotegida.

    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);
        }
    }

Criptografe as entradas do arquivo 7z com senhas próprias e deixe uma entrada não criptografada

Semelhante ao ZIP, o usuário pode descriptografar o arquivo inteiro ou uma entrada específica dele.
O arquivo 7Z pode ser criptografado com ou sem proteção de nomes de arquivo. Se os nomes dos arquivos estiverem criptografados, você precisará fornecer uma senha na instanciação do arquivo .

    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);
        }
    }

Descriptografe todo o arquivo com nomes de arquivos criptografados para o diretório

Quer os nomes dos arquivos sejam criptografados ou não, é seguro fornecer uma senha no construtor de extração.
O exemplo abaixo só funcionará quando apenas o conteúdo estiver protegido.

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

Descriptografar entrada específica

    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: