PyPDF2を使用し、PythonでPDFファイルの暗号化及び復号化を行ってみます。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)
■PyPDF2をインストールする
PyPDF2をインストールを行いますが、今回はpipを経由してインストールを行うので、まずWindowsのコマンドプロンプトを起動します。
pip install PyPDF2
起動後、上記のコマンドを入力し、Enterキーを押します。
なお、今回は、pythonランチャーを使用しており、Python Version 3.8.5にインストールを行うために、pipを使う場合にはコマンドでの切り替えを行います。
py -3.8 -m pip install PyPDF2
切り替えるために、上記のコマンドを入力し、Enterキーを押します。
Processing c:\users\user\appdata\local\pip\cache\wheels\b1\1a\8f\a4c34be976825a2f7948d0fa40907598d69834f8ab5889de11\pypdf2-1.26.0-py3-none-any.whl
Installing collected packages: PyPDF2
Successfully installed PyPDF2-1.26.0
Enterキーを押すと、インストールが開始されます。開始後「Successfully installed」と表示されれば、PyPDF2のインストールが正常に完了となります。
■PDFファイルを用意する
PyPDF2のインストールが完了しましたので、PDFファイルの暗号化及び復号化を行うため、PDFファイルを用意します。
今回は企画提案書のPDFファイル(sample.pdf)を用意しました。
ファイルが保存されている場所は「C:\Users\user\test(フォルダパス)」です。
■PyPDF2を使用し、PDFファイルの暗号化及び復号化
PDFファイルの用意ができましたので、PyPDF2を使用し、PDFファイルの暗号化及び復号化を行うスクリプトを書いていきます。
■暗号化
■コード
from PyPDF2 import PdfFileWriter, PdfFileReader #PdfFileWriterオブジェクトを作成 out = PdfFileWriter() #指定したPDFファイルをPdfFileReaderで開く file = PdfFileReader(r"C:\Users\user\test\sample.pdf") #PDFファイルのページ数を取得する num = file.numPages #PDFファイルの全ページを繰り返し、ファイル作成 #新しいファイルにページを追加する for idx in range(num): page = file.getPage(idx) out.addPage(page) #パスワードを設定 password = "password" #入力したパスワードで新しいファイルを暗号化 out.encrypt(password) #新しいPDFファイルを作成 #暗号化された情報をファイルに書き込み with open("sample_pass.pdf","wb") as f: out.write(f)
PyPDF2モジュールのPdfFileWriterとPdfFileReaderを呼び出します。PdfFileWriterオブジェクトを作成し、fileという変数を作成し、今回用意したPDFファイルを指定し、PdfFileReaderで開きます。
開いた後に、numという変数を作成し、今回用意したPDFファイル内のページ数を取得し格納します。
取得後、PDFファイル内のページに対してfor文によるループ処理(繰り返し処理)を行います。
行った後にファイルを作成し、そのファイル内にループ処理(繰り返し処理)したページを追加します。
追加後、passwordという変数を作成し、その中にPDFファイルのパスワードを設定し格納します。
格納後、新しいPDFファイルを作成し、先ほど作成したファイル(暗号化された情報)をPDFファイルの中に書き込みます。
■実行
今回のスクリプトを「pdf_encryption.py」という名前で保存し、コマンドプロンプトから実行してみます。
実行してみると、Pythonのカレントディレクトリ(作業ディレクトリ)内に新しいPDFファイルが生成されて置かれていることが確認できました。
新しいPDFファイルを開いてみると、「パスワードを入力してください」というポップアップが表示され「
■暗号化されたPDFファイルを復号化する
次に今回暗号化されたPDFファイルを、復号化するスクリプトを書いていきます。
■復号化
■コード
from PyPDF2 import PdfFileWriter, PdfFileReader #PdfFileWriterオブジェクトを作成 out = PdfFileWriter() #暗号化されたPDFファイルを指定しPdfFileReaderで開く file = PdfFileReader(r"C:\Users\user\test\sample_pass.pdf") #PDFファイルに設定したパスワード password = "password" #暗号化されているかどうかを確認 if file.isEncrypted: #パスワードで復号化 file.decrypt(password) #PDFファイルの全ページを繰り返し、ファイル作成 #新しいファイルにページを追加する for idx in range(file.numPages): page =file.getPage(idx) out.addPage(page) #新しいPDFファイルを作成 #復号化された情報をファイルに書き込み with open("sample_decryption.pdf","wb") as f: out.write(f) print("正常に復号化されました") else: print("既に復号化は行われています")
PyPDF2モジュールのPdfFileWriterとPdfFileReaderを呼び出します。
PdfFileWriterオブジェクトを作成し、fileという変数を作成し、今回暗号化されたPDFファイルを指定し、PdfFileReaderで開きます。
開いた後にpasswordという変数を作成し、暗号化されたPDFファイルのパスワードを記述し格納します。
その後、指定した暗号化されたPDFファイルが暗号化されているかどうかを確認するために、if文による条件分岐を行います。
暗号化されていた場合は、file.decrypt()でパスワードで復号化し、PDFファイル内のページに対してfor文によるループ処理(繰り返し処理)を行います。
行った後にファイルを作成し、そのファイル内にループ処理(繰り返し処理)したページを追加します。
追加した後に、新しいPDFファイルを作成し、その中に復号化された情報をファイルに書き込みします。
■実行
このスクリプトを「pdf_decryption.py」という名前で保存し、コマンドプロンプトから実行してみます。
実行してみると、「正常に復号化されました」と出力され、Pythonのカレントディレクトリ(作業ディレクトリ)内に生成されたPDFファイルが置かれていることが確認できました。
PDFファイルを開くと、暗号化されたPDFファイルの時とは異なり、パスワードの入力が求められず、ファイルの中身を確認することができました。
コメント