Como criptografar e descriptografar arquivos PDF usando Python

Como criptografar e descriptografar arquivos PDF usando Python

O acesso não autorizado a arquivos confidenciais é um problema comum atualmente. Para garantir que apenas as pessoas que você autoriza possam acessar o conteúdo de seus arquivos, você pode criptografá-los antes da transmissão.

Aprenda como criptografar um arquivo PDF usando Python e como descriptografar um de volta ao seu estado original.

Configurando o ambiente

Para acompanhar, você deve estar familiarizado com os fundamentos do Python.

Em um terminal Mac ou interface de linha de comando do Windows, execute o seguinte comando para instalar a biblioteca PyMuPDF:

pip install PyMuPDF

Esta biblioteca irá ajudá-lo a abrir e manipular arquivos PDF.

Instalação da biblioteca PyMuPDF no terminal de um IDE

Quando terminar de instalar o PyMuPDF, você estará pronto para começar a codificar.

Importar o Módulo Fitz

Importe o módulo fitz da biblioteca PyMuPDF. Isso permitirá que você chame e use as funções que ele suporta.

import fitz

Você usará fitz para abrir, criptografar, descriptografar e salvar os PDFs.

Verifique se o PDF está criptografado

Crie uma função que verificará se o PDF já está criptografado retornando um valor booleano.

def pdf_is_encrypted(file):
    pdf = fitz.Document(file)
    return pdf.isEncrypted

Você usará essa função posteriormente para ajudar o programa a decidir automaticamente se criptografa ou descriptografa o PDF de entrada.

Criptografando o PDF

Crie uma função para criptografar o PDF de entrada. A função verificará se o PDF já está criptografado. Se não estiver criptografado, ele será criptografado usando o algoritmo AES-256. Este é o algoritmo de criptografia mais forte que o Fitz oferece. Ele finalmente salvará o PDF criptografado.

def encrypt_pdf_file(pdf, password, outfile, file):
    if not pdf_is_encrypted(file):
        perm = int(
            # Ensure everyone with the PDF
            # can access it
            fitz.PDF_PERM_ACCESSIBILITY
            | fitz.PDF_PERM_PRINT # permits printing
            | fitz.PDF_PERM_COPY # permits copying
            | fitz.PDF_PERM_ANNOTATE # permits annotations
        )

        # eEncryption algorithm
        encrypt_meth = fitz.PDF_ENCRYPT_AES_256

        pdf.save(outfile, encryption=encrypt_meth, user_pw=password,
                 permissions=perm)

        if pdf.save:
            print("PDF encrypted")

Esta função salva o PDF criptografado no caminho do arquivo que você passa no argumento outfile.

Saída de um programa mostrando um arquivo criptografado no explorer

Descriptografando o PDF criptografado

Crie uma função de descriptografia. Esta função verificará primeiro se o arquivo de entrada está criptografado. Se estiver criptografado, ele solicitará que o usuário digite a senha. Em seguida, ele tentará abrir o PDF usando a senha fornecida. Se a senha estiver correta, fitz descriptografará o PDF. Em seguida, ele salvará o conteúdo do PDF descriptografado em outro arquivo PDF desprotegido.

def decrypt_pdf(file):
    if pdf_is_encrypted(file):
        password = input('Enter pdf password: ')
        pdf = fitz.open(file)

        if pdf.authenticate(password):
            pdf.save('decrypted.pdf')


            if pdf.save:
                print("PDF decrypted")
        else:
            print('Incorrect Password')

Este código salva o PDF desprotegido em seu diretório de trabalho atual.

saída de um programa mostrando um arquivo descriptografado no explorer

O descriptografou o arquivo protected.pdf e o salvou como decrypted.pdf .

Controlando o Fluxo do Programa

Crie uma função principal que controlará o fluxo do seu programa. Ele armazenará o caminho do PDF de entrada, chamará a função criptografar e descriptografar e passará os parâmetros de entrada.

def main():
    # replace the file path with either that of
    # the pdf to be encrypted or decrypted
    file = 'sample.pdf'
    pdf = fitz.open(file)
    password = 'pass123'
    encrypt_pdf_file(pdf, password, 'protected.pdf', file)
    decrypt_pdf(pdf)

Para alterar o nome do arquivo PDF criptografado, substitua “protected.pdf” pelo seu, certificando-se de manter a extensão “.pdf”.

Executando o método principal

Certifique-se de que o método principal seja executado primeiro:

if __name__ == '__main__':
    main()

Este código verifica se o script está sendo executado como o programa principal e não como um módulo importado. Se for o programa principal, chama a função principal.

Aprimore suas habilidades em Python

Criar um programa de criptografia/descriptografia de PDF em Python é um projeto divertido, mas desafiador. Ele ajuda você a praticar suas habilidades em Python e dominar o manuseio de arquivos com a linguagem.

Para aprimorar suas habilidades, você deve trabalhar em mais projetos Python. Isso ajudará você a interagir com mais bibliotecas e módulos do Python. O Python é muito diversificado e você pode aplicá-lo em muitas áreas para realizar diferentes tarefas.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *