【Python】PDFファイルの暗号化解説|PyPDF2によるパスワード設定(かける・解除する)方法

こんにちは、Kosei(@kay_diacc2)です!

PDFファイルをPythonで暗号化(パスワード設定)したり、暗号(パスワードロック)を解除できるようにしたい」本記事ではこの要望に応えます。記事前半では暗号化手順を紹介し、後半では暗号の解除方法を紹介します。

目次

PDFファイルを暗号化する手順

Pythonでは「PyPDF2」というPDF文書を操作できるモジュールがあり、それを用いてPDFを暗号化(パスワード設定)します。

PyPDF2モジュール

PDFを扱うPyPDF2モジュールは事前にインストールが必要です。コマンドラインから下記を実行し、インストールしておきましょう。

pip install PyPDF2

Pythonを用いたPDFファイル暗号化実践

それでは実際にPythonを活用してプログラムを記述していきましょう!

PDF読み込み用のオブジェクト生成

まず、暗号化したいPDFファイルをopen()関数に渡して読み込みます。続いて、読み込み内容をPyPDF2.PdfFileReader()メソッドに渡してオブジェクトを生成します。

import PyPDF2
import os

#読み込むPDFファイル名を記載しましょう
filename = "ファイル名.pdf"

#PDFファイルをバイナリ読み込みモードで開く
pdf_file = open(filename,"rb")

#PyPDF2.PdfFileReader()メソッドに上記を渡してオブジェクト生成
pdf_filereader = PyPDF2.PdfFileReader(pdf_file)

PDF書き込み用のオブジェクト生成

PDFの暗号化処理では、読み込んだPDFファイル情報を新たに作成する書き込み用オブジェクトにコピーした後、書き込み用オブジェクトに暗号化情報を付与します。そして、最終的に書き込み用オブジェクトをPDFとして出力します。

ここでは上記のピンク強調部分を下記で実行します。

#PdfFileWriterオブジェクト
pdf_writer = PyPDF2.PdfFileWriter()

#PdfFileReaderオブジェクトからPdfFileWriterオブジェクトにページをコピー
for num in range(pdf_filereader.numPages):
    pdf_writer.addPage(pdf_filereader.getPage(num))

PDFファイル暗号化

上記で作成した書き込み用のオブジェクトにパスワード情報を付与します。

#パスワードを指定しましょう
password = "password"

#暗号化
pdf_writer.encrypt(password)

PDFファイル出力

最後に暗号化したPDFファイル出力です。初期に読み込んだPDFファイルはosモジュールを用いて削除し、暗号化されたファイルを同じ名前で作成することとします。

#暗号化前のファイル情報削除
os.remove(os.path.abspath(filename))

#暗号化したファイル出力
output = open(filename,"wb")
pdf_writer.write(output)
output.close()

PDF暗号化用のプログラム全量まとめ

本記事で紹介したPDF暗号化用のプログラムを関数形式にまとめて紹介します。

import PyPDF2
import os

#読み込むPDFファイル名を記載しましょう
filename = "file.pdf"


def pdf_encrypt(filename):
    
    #pasword設定
    password = str(input("パスワードを入力しましょう"))
    
    #PdfFileReaderオブジェクト
    open_pdf = open(filename,"rb")
    pdf_filereader = PyPDF2.PdfFileReader(open_pdf)

    #PdfFileWriterオブジェクト
    pdf_writer = PyPDF2.PdfFileWriter()

    for num in range(pdf_filereader.numPages):
        pdf_writer.addPage(pdf_filereader.getPage(num))
        
    #暗号化
    pdf_writer.encrypt(password)
    
    #元ファイル削除
    os.remove(os.path.abspath(filename))

    #PDFファイル生成
    output = open(filename,"wb")
    pdf_writer.write(output)
    output.close()
    
    return "complete!"

関数名はpdf_encrypt()であり、第一引数に暗号化したいファイル名を指定して実行しましょう。

PDFファイルの暗号を解除する手順・実践

PDFファイルの暗号解除は、暗号化とほぼ同様の手順で実行できます。そのため、全量記載したプログラムとその要点のみ示します。

import PyPDF2

#ファイル名を記載しましょう
filename = "ファイル名.pdf"

def pdf_decrypt(filename):
    
    #pasword設定
    password = str(input("パスワードを入力しましょう"))
    
    #PdfFileReaderオブジェクト
    open_pdf = open(filename,"rb")
    pdf_filereader = PyPDF2.PdfFileReader(open_pdf)
    
    #暗号解除
    pdf_filereader.decrypt(password)

    #PdfFileWriterオブジェクト
    pdf_writer = PyPDF2.PdfFileWriter()

    for num in range(pdf_filereader.numPages):
        pdf_writer.addPage(pdf_filereader.getPage(num))
    
    #元ファイル削除
    os.remove(os.path.abspath(filename))

    #PDFファイルを新規生成
    output = open(filename,"wb")
    pdf_writer.write(output)
    output.close()
    
    return "complete!"

関数名はpdf_decrypt()であり、第一引数に暗号解除したいファイル名を指定して実行しましょう。

暗号解除はdecrypt()メソッドにパスワードを渡すことで実現できますPdfFileReadオブジェクトと合わせて下記のように実行します。

pdf_filereader.decrypt("パスワードを入力")

最後にPDFファイルを開き、パスワードロックが解除されているか確認してみましょう!

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
URLをコピーする
URLをコピーしました!
目次
閉じる