PDF ( Portable Document Format ) es uno de los formatos de archivo más utilizados para almacenar y enviar documentos. Se usan comúnmente para muchos propósitos, como libros electrónicos, currículums, documentos escaneados, etc. Pero como compartimos pdf con muchas personas, existe la posibilidad de que sus datos se filtren o sean robados. Por lo tanto, es necesario proteger con contraseña nuestros archivos PDF para que solo las personas autorizadas puedan tener acceso a ellos.
En este artículo, vamos a ver cómo podemos establecer una contraseña para proteger un archivo PDF. Usaremos el módulo PyPDF2 para cifrar y descifrar nuestros archivos PDF. PyPDF2 es una biblioteca de Python creada como un conjunto de herramientas de PDF. Es capaz de:
- Extraer información del documento (título, autor,…)
- Dividir y fusionar documentos
- Recortar páginas
- Cifrado y descifrado de archivos PDF
Instalación
PyPDF2 no es una biblioteca incorporada, por lo que debemos instalarla.
pip3 install PyPDF2
Ahora, estamos listos para escribir nuestro script para cifrar archivos PDF.
Cifrar el archivo PDF
Primero, abriremos nuestro archivo PDF con el objeto del lector. Luego, crearemos una copia del archivo original para que, si algo sale mal, no afecte nuestro archivo original. Para crear una copia, tenemos que recorrer cada página del archivo y agregarlo a nuestro nuevo archivo PDF. Luego, simplemente podemos cifrar nuestro nuevo archivo PDF.
Archivo PDF utilizado:
Python3
# import PdfFileWriter and PdfFileReader # class from PyPDF2 library from PyPDF2 import PdfFileWriter, PdfFileReader # create a PdfFileWriter object out = PdfFileWriter() # Open our PDF file with the PdfFileReader file = PdfFileReader("myfile.pdf") # Get number of pages in original file num = file.numPages # Iterate through every page of the original # file and add it to our new file. for idx in range(num): # Get the page at index idx page = file.getPage(idx) # Add it to the output file out.addPage(page) # Create a variable password and store # our password in it. password = "pass" # Encrypt the new file with the entered password out.encrypt(password) # Open a new file "myfile_encrypted.pdf" with open("myfile_encrypted.pdf", "wb") as f: # Write our encrypted PDF to this file out.write(f)
Producción:
Esto creará una copia del archivo original y la cifrará con la contraseña ingresada. Una vez que el PDF está encriptado, no se puede abrir sin ingresar la contraseña correcta.
Descifrar el archivo PDF
Pero, ¿y si queremos descifrar el archivo PDF encriptado? También podemos hacer esto con esta biblioteca. El proceso es casi el mismo. Abriremos el archivo encriptado con la contraseña correcta y crearemos una copia iterando a través de cada página y agregándolo a nuestro nuevo archivo PDF.
Aquí está el código:
Python3
# import PdfFileWriter and PdfFileReader # class from PyPDF2 library from PyPDF2 import PdfFileWriter, PdfFileReader # Create a PdfFileWriter object out = PdfFileWriter() # Open encrypted PDF file with the PdfFileReader file = PdfFileReader("myfile_encrypted.pdf") # Store correct password in a variable password. password = "pass" # Check if the opened file is actually Encrypted if file.isEncrypted: # If encrypted, decrypt it with the password file.decrypt(password) # Now, the file has been unlocked. # Iterate through every page of the file # and add it to our new file. for idx in range(file.numPages): # Get the page at index idx page = file.getPage(idx) # Add it to the output file out.addPage(page) # Open a new file "myfile_decrypted.pdf" with open("myfile_decrypted.pdf", "wb") as f: # Write our decrypted PDF to this file out.write(f) # Print success message when Done print("File decrypted Successfully.") else: # If file is not encrypted, print the # message print("File already decrypted.")
Esto creará una copia del archivo encriptado que no requiere una contraseña para abrirse.
Entonces, este era un script básico para cifrar y descifrar archivos PDF. Pero hay una plétora de ideas para extender esto. Puede crear una herramienta GUI para hacerlo o desarrollar una aplicación web que cifre archivos PDF. También puede crear un administrador de PDF completo utilizando la biblioteca PyPDF2 .