Encrypt and Decrypt PDF using PyPDF2

PDF (Portable Document Format) is one of the most used file formats for storing and sending documents. They are commonly used for many purposes such as eBooks, Resumes, Scanned documents, etc. But as we share pdf to many people, there is a possibility of its data getting leaked or stolen. So, it’s necessary to password protect our PDF files so that only authorized persons can have access to it.

In this article, we are going to see how can we set a password to protect a PDF file. We’ll be using the PyPDF2 module to encrypt and decrypt our PDF files. PyPDF2 is a Python library built as a PDF toolkit. It is capable of:

  • Extracting document information (title, author, …)
  • Splitting and Merging documents
  • Cropping pages
  • Encrypting and decrypting PDF files

Installation

PyPDF2 is not an inbuilt library, so we have to install it.

pip3 install PyPDF2

Now, we are ready to write our script to encrypt PDF files.

Encrypting the PDF File

First, We will open our PDF file with the reader object. Then, we will create a copy of the original file so that if something goes wrong, it doesn’t affect our original file. To create a copy, we have to iterate through every page of the file and add it to our new PDF file. Then, we can simply encrypt our new PDF file.



PDF File used:

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

This will create a copy of the original file and encrypt it with the entered password. Once the PDF is encrypted, it can not be opened without entering the correct password.

Decrypting The PDF File

But what if we want to decrypt the encrypted PDF file? We can do this too with this library. The process is almost the same. We will open the encrypted file with the correct password and create a copy of it by iterating through every page of it and adding it to our new PDF file.

Here’s the code:

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


This will create a copy of the encrypted file that doesn’t require a password to be opened.

So, this was a basic script to encrypt and decrypt PDF files. But there are a plethora of ideas to extend this. You can create a GUI tool to do it or Develop a Web application that encrypts PDF files. You can also create a whole PDF Manager using the PyPDF2 library.

Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course.




My Personal Notes arrow_drop_up

Wear your failure as a badge of honour

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.