Leitores como você ajudam a apoiar o MUO. Quando você faz uma compra usando links em nosso site, podemos ganhar uma comissão de afiliado. Consulte Mais informação.

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 o noções básicas de Python.

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

pip instalar PyMuPDF

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

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

O código-fonte completo está disponível em um Repositório GitHub.

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.

instagram viewer
importar 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.

defpdf_is_encrypted(arquivo):
pdf = fitz. Arquivo de documento)
retornar 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 irá criptografá-lo usando o algoritmo AES-256. Este é o algoritmo de criptografia mais forte que o Fitz oferece. Ele finalmente salvará o PDF criptografado.

defcriptografar_pdf_arquivo(pdf, senha, outfile, arquivo):
senão pdf_is_encrypted (arquivo):
perm = int(
# Garanta a todos com o PDF
# pode acessá-lo
fitz. PDF_PERM_ACCESSIBILITY
| fitz. PDF_PERM_PRINT # permite impressão
| fitz. PDF_PERM_COPY # permite copiar
| fitz. PDF_PERM_ANNOTATE # permite anotações
)

# Algoritmo de criptografia eletrônica
encrypt_meth = fitz. PDF_ENCRYPT_AES_256

pdf.save (arquivo de saída, criptografia=encrypt_meth, user_pw=senha,
permissões = perm)

se pdf.salvar:
imprimir("PDF criptografado")

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

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.

defdescriptografar_pdf(arquivo):
se pdf_is_encrypted (arquivo):
senha = entrada('Digite a senha do pdf: ')
pdf = fitz.open (arquivo)

se pdf.authenticate (senha):
pdf.salvar('desencriptado.pdf')

se pdf.salvar:
imprimir("PDF descriptografado")
outro:
imprimir('Senha incorreta')

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

O descriptografou o protegido.pdf arquivo e salve-o como descriptografado.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.

defprincipal():
# substitua o caminho do arquivo pelo de
# o pdf a ser criptografado ou descriptografado
arquivo = 'amostra.pdf'
pdf = fitz.open (arquivo)
senha = 'pass123'
encrypt_pdf_file (pdf, senha, 'protegido.pdf', arquivo)
descriptografar_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:

se __nome__ == '__principal__':
principal()

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.