Visão geral

Aspose.ZIP facilita uma série de operações de criptografia e descriptografia para arquivos. Usando a API Aspose.Zip para Python.NET, você pode criptografar e descriptografar arquivos ZIP, RAR e 7-Zip com eficiência.

Criptografar arquivos ZIP

Duas técnicas de criptografia podem ser utilizadas para arquivos ZIP: o método tradicional mais antigo, agora considerado menos seguro, e a criptografia AES moderna, mais robusta. O padrão ZIP permite a criptografia de entradas individuais no mesmo arquivo usando qualquer um dos métodos. A criptografia AES, conhecida por sua segurança mais forte, suporta vários comprimentos de chave, incluindo 128 bits, 192 bits e 256 bits, oferecendo proteção aprimorada para dados confidenciais em arquivos ZIP. Cada entrada no mesmo arquivo pode ser criptografada com criptografia própria, para que você possa misturar diferentes tipos de criptografia no mesmo arquivo.

Desbloqueie ZIP com o método Deflate

    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)

O código cria um novo arquivo ZIP chamado archive.zip, compacta o conteúdo de alice29.txt usando o método de compactação Deflate, criptografa-o com o método tradicional de criptografia ZIP usando a senha "p@s$S" e salva o arquivo compactado e criptografado. arquivo para o arquivo ZIP recém-criado.

Criptografe ZIP com AES

    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)

O código fornecido demonstra como criar um arquivo ZIP chamado archive.zip, compactar um arquivo alice29.txt usando o método de compactação Deflate e criptografá-lo com criptografia AES-256 usando a senha "p@s$S". Para esses exemplos, fornecemos instâncias de EncryptionSetting dentro do construtor de arquivo correspondente. É possível aplicar criptografia para uma entrada específica deixando outras desprotegidas.
Isso mostra a flexibilidade de aplicar criptografia a entradas específicas em um arquivo ZIP, permitindo que diferentes arquivos tenham níveis distintos de proteção. 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 observar que esta prática pode complicar o processo de gerenciamento e descriptografia, e a compatibilidade com várias ferramentas de arquivo ZIP pode variar.

Criptografe ZIP a segunda entrada de três

    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)

Este código demonstra a criação de um arquivo ZIP protegido por senha em Python. Ele adiciona três arquivos: alice29.txt, asyoulik.txt e Fields.c.
Funciona assim:
Abre ou cria um arquivo para o arquivo ZIP com base no nome armazenado em this.resultFile. Cria objetos FileInfo para representar os arquivos a serem adicionados. Cria um novo objeto de arquivo.
Adiciona arquivos: alice29.txt e Fields.c são adicionados ao arquivo sem nenhuma configuração especial. asyoulik.txt é adicionado com criptografia AES-256, exigindo a senha p@s$ para descriptografia. Salva o arquivo concluído no arquivo especificado.

Criptografe ZIP com diferentes métodos e senhas

    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)

Este trecho de código demonstra a criação de um arquivo ZIP em Python onde arquivos individuais são criptografados com diferentes métodos e senhas. Veja como funciona:
Configuração do arquivo: Abre ou cria um arquivo para o arquivo ZIP com base no nome armazenado em this.resultFile. Cria objetos FileInfo que representam os arquivos a serem adicionados: alice29.txt, asyoulik.txt e campos.c.
Criando o Arquivo: Cria um novo objeto de arquivo (archive).
Adicionando arquivos criptografados: O código usa um loop para iterar pelos arquivos e adicioná-los ao arquivo com configurações de criptografia específicas:
alice29.txt - Este arquivo é adicionado com ** Criptografia AES-256** e requer a senha "p@s" para descriptografia.
asyoulik.txt - Este arquivo é adicionado com um método de criptografia diferente chamado Criptografia Tradicional. Ele também usa uma senha separada, "p@s", para descriptografia.
fields.c - Este arquivo é adicionado com criptografia AES-128 novamente, mas com uma senha diferente, "p@s$3", para descriptografia.
Salvando o arquivo: Finalmente, o código salva o arquivo completo contendo os arquivos criptografados no arquivo especificado.

Criptografe o arquivo ZIP com diferentes métodos e senhas

    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)

Este código pega um arquivo ZIP existente plain.zip, criptografa seu conteúdo usando AES-256 com a senha p@s$ e salva a versão criptografada como um novo arquivo chamado encrypted.zip.

Descriptografar arquivos ZIP

Descriptografar arquivo ZIP com senha

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

O usuário tem a opção de descriptografar uma entrada específica no arquivo ZIP criptografado. Este trecho de código demonstra uma abordagem básica para descriptografar a primeira entrada de um arquivo ZIP protegido por senha. Se a senha estiver correta, o arquivo será aberto com sucesso.

Descriptografar arquivo ZIP inteiro

    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")

Este código simples pega um arquivo ZIP protegido por senha "source.zip", usa a senha fornecida "p@s$S" para descriptografia e extrai todo o seu conteúdo para uma pasta "destino" designada.

Descriptografar arquivo RAR

Aspose.ZIP não oferece suporte à composição de arquivos RAR, apenas à extração. 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

    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")

Essencialmente, este código funciona de forma semelhante ao exemplo ZIP, mas funciona especificamente para arquivos RAR. É necessário um arquivo RAR protegido por senha "source.rar", usa a senha fornecida "p@s$S" para descriptografia e extrai todo o seu conteúdo para uma pasta designada "destino".

Descriptografe uma entrada específica do arquivo RAR

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

Este código abre o arquivo RAR source.rar, descriptografa e extrai a primeira entrada do arquivo usando a senha “p@s$S” e salva no arquivo first_entry.bin. Este exemplo funcionaria se apenas o conteúdo das entradas fosse criptografado, mas os nomes dos arquivos não.

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

    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())

Este código abre o arquivo RAR source.rar, descriptografa o segundo registro do arquivo usando a senha "p@s$S" e lê seu conteúdo em um ByteArrayOutputStream. Ao usar um buffer de leitura, o código garante a transferência gradual de dados, o que ajuda a lidar com arquivos grandes com eficiência. Este exemplo funcionaria se apenas o conteúdo das entradas fosse criptografado, mas os nomes dos arquivos não. Neste exemplo, os bytes de entrada estão sendo copiados para o fluxo de memória.

Criptografia 7zip com AES 256

A única opção de criptografia de arquivo 7z é AES . O arquivo utiliza compactação LZMA2 para redução eficiente do tamanho do arquivo e criptografia AES com senha para maior segurança. O código percorre os arquivos e os adiciona ao arquivo usando o método CreateEntry.

Criptografar e compactar todo o arquivo 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)

Este código cria um arquivo 7z criptografado contendo três arquivos: alice29.txt, asyoulik.txt e campos.c. O arquivo utiliza compactação LZMA2 e criptografia AES com a senha "p@s$S". Os arquivos são adicionados ao arquivo usando o método CreateEntry, e o próprio arquivo é salvo no arquivo archive.7z criado.

7z criptografar com senha

    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)

Este código cria um arquivo 7z criptografado contendo três arquivos: alice29.txt, asyoulik.txt e campos.c. O primeiro arquivo é adicionado ao arquivo sem configurações especiais. O segundo arquivo é anexado usando compactação LZMA2 e criptografia AES com a senha "p@s$S". O terceiro arquivo é anexado usando compactação LZMA2 e criptografia AES com a senha “$ecret”. Finalmente, o arquivo é salvo no arquivo archive.7z.
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 a senha em instanciação de arquivo .

Descriptografar arquivos 7ZIP

Descriptografe o arquivo 7z com nomes de arquivos criptografados

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

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.

Descriptografar entrada específica do 7zip

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

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.

Outros recursos da API Aspose.ZIP com suporte para Python.Net

Com a biblioteca Aspose.ZIP em Python.Net, você pode lidar perfeitamente com várias tarefas relacionadas a documentos de arquivo ZIP. Se você precisa converter formatos, mesclar arquivos, editar conteúdo ou extrair dados, o Aspose.ZIP oferece funcionalidade abrangente para agilizar seu fluxo de trabalho e aumentar a produtividade.

  

Support and Learning Resources

  
  

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