Lectores como tú ayudan a apoyar a MUO. Cuando realiza una compra utilizando enlaces en nuestro sitio, podemos ganar una comisión de afiliado. Leer más.

El acceso no autorizado a archivos confidenciales es un problema común hoy en día. Para asegurarse de que solo las personas que autorice puedan acceder al contenido de sus archivos, puede cifrarlos antes de la transmisión.

Aprenda a cifrar un archivo PDF con Python y cómo descifrar uno a su estado original.

Configuración del entorno

Para seguir, debe estar familiarizado con el fundamentos de python.

En un terminal Mac o interfaz de línea de comandos de Windows, ejecute el siguiente comando para instalar la biblioteca PyMuPDF:

pip instalar PyMuPDF

Esta biblioteca lo ayudará a abrir y manipular archivos PDF.

Cuando haya terminado de instalar PyMuPDF, estará listo para comenzar a codificar.

El código fuente completo está disponible en un repositorio GitHub.

Importar el Módulo Fitz

Importar módulo fitz de la biblioteca PyMuPDF. Esto le permitirá llamar y utilizar las funciones que admite.

instagram viewer
importar fitz

Utilizará fitz para abrir, cifrar, descifrar y guardar los archivos PDF.

Comprobar si el PDF está cifrado

Cree una función que verificará si el PDF ya está encriptado y devolverá un valor booleano.

definitivamentepdf_is_encrypted(archivo):
pdf = fitz. Documento (archivo)
devolver pdf.isEncrypted

Utilizará esta función más adelante para ayudar al programa a decidir automáticamente si cifrar o descifrar el PDF de entrada.

Cifrar el PDF

Cree una función para cifrar el PDF de entrada. La función comprobará si el PDF ya está cifrado. Si no está encriptado, lo encriptará usando el algoritmo AES-256. Este es el algoritmo de encriptación más fuerte que ofrece fitz. Finalmente guardará el PDF encriptado.

definitivamentecifrar_archivo_pdf(pdf, contraseña, outfile, archivo):
sino pdf_is_encrypted (archivo):
permanente = int(
# Asegúrese de que todos tengan el PDF
# puede acceder
fitz. PDF_PERM_ACCESIBILIDAD
| fitz. PDF_PERM_IMPRIMIR # permisos de impresión
| fitz. PDF_PERM_COPY # permite copiar
| fitz. PDF_PERM_ANOTAR # permite anotaciones
)

# Algoritmo de cifrado electrónico
encrypt_meth = fitz. PDF_ENCRYPT_AES_256

pdf.save (archivo de salida, cifrado=encrypt_meth, user_pw=contraseña,
permisos = permanente)

si pdf.guardar:
imprimir("PDF encriptado")

Esta función guarda el PDF encriptado en la ruta del archivo que pasa en el argumento del archivo de salida.

Descifrar el PDF cifrado

Cree una función de descifrado. Esta función primero verificará si el archivo de entrada está encriptado. Si está encriptado, le pedirá al usuario que ingrese la contraseña. A continuación, intentará abrir el PDF con la contraseña proporcionada. Si la contraseña es correcta, fitz descifrará el PDF. A continuación, guardará el contenido del PDF descifrado en otro archivo PDF desprotegido.

definitivamentedescifrar_pdf(archivo):
si pdf_is_encrypted (archivo):
contraseña = entrada ('Ingrese la contraseña del pdf:')
pdf = fitz.open (archivo)

si pdf.authenticate (contraseña):
pdf.guardar('descifrado.pdf')

si pdf.guardar:
imprimir("PDF descifrado")
demás:
imprimir('Contraseña incorrecta')

Este código guarda el PDF desprotegido en su directorio de trabajo actual.

El ha descifrado el protegido.pdf archivo y lo guardó como descifrado.pdf.

Control del flujo del programa

Cree una función principal que controlará el flujo de su programa. Almacenará la ruta del PDF de entrada, llamará a la función de cifrado y descifrado y pasará los parámetros de entrada.

definitivamenteprincipal():
# reemplazar la ruta del archivo con la de
# el pdf a cifrar o descifrar
archivo = 'muestra.pdf'
pdf = fitz.open (archivo)
contraseña = 'pass123'
encrypt_pdf_file (pdf, contraseña, 'protegido.pdf', archivo)
descifrar_pdf (pdf)

Para cambiar el nombre del archivo PDF encriptado, reemplace "protected.pdf" con el suyo propio, asegurándose de mantener la extensión ".pdf".

Ejecutar el método principal

Asegúrese de que el método principal se ejecute primero:

si __nombre__ == '__principal__':
principal()

Este código verifica si el script se ejecuta como el programa principal y no como un módulo importado. Si es el programa principal, llama a la función principal.

Mejora tus habilidades de Python

Crear un programa de cifrado/descifrado de PDF en Python es un proyecto divertido pero desafiante. Le ayuda a practicar sus habilidades de Python y dominar el manejo de archivos con el lenguaje.

Para mejorar sus habilidades, debe trabajar en más proyectos de Python. Esto lo ayudará a interactuar con más bibliotecas y módulos de Python. Python es muy diverso y puedes aplicarlo en muchas áreas para llevar a cabo diferentes tareas.