Python を使用して PDF ファイルを暗号化および復号化する方法

Python を使用して PDF ファイルを暗号化および復号化する方法

機密ファイルへの不正アクセスは、今日よくある問題です。許可した人だけがファイルのコンテンツにアクセスできるようにするために、送信前にファイルを暗号化できます。

Python を使用して PDF ファイルを暗号化する方法と、元の状態に復号化する方法を学びます。

環境の設定

先に進むには、Python の基本に精通している必要があります。

Mac ターミナルまたは Windows コマンド ライン インターフェイスで、次のコマンドを実行して PyMuPDF ライブラリをインストールします。

pip install PyMuPDF

このライブラリは、PDF ファイルを開いて操作するのに役立ちます。

IDE のターミナルへの PyMuPDF ライブラリのインストール

PyMuPDF のインストールが完了したら、コーディングを開始できます。

Fitz モジュールをインポートする

PyMuPDF ライブラリの fitz モジュールをインポートします。これにより、サポートされている関数を呼び出して使用できるようになります。

import fitz

PDF を開く、暗号化する、復号化する、保存するために fitz を使用します。

PDF が暗号化されているかどうかを確認する

PDF が既に暗号化されているかどうかをチェックし、ブール値を返す関数を作成します。

def pdf_is_encrypted(file):
    pdf = fitz.Document(file)
    return pdf.isEncrypted

後でこの関数を使用して、入力 PDF を暗号化するか復号化するかをプログラムが自動的に決定できるようにします。

PDF の暗号化

入力 PDF を暗号化する関数を作成します。この関数は、PDF が既に暗号化されているかどうかを確認します。暗号化されていない場合は、AES-256 アルゴリズムを使用して暗号化されます。これは、fitz が提供する最強の暗号化アルゴリズムです。最後に、暗号化された PDF を保存します。

def encrypt_pdf_file(pdf, password, outfile, file):
    if not pdf_is_encrypted(file):
        perm = int(
            # Ensure everyone with the PDF
            # can access it
            fitz.PDF_PERM_ACCESSIBILITY
            | fitz.PDF_PERM_PRINT # permits printing
            | fitz.PDF_PERM_COPY # permits copying
            | fitz.PDF_PERM_ANNOTATE # permits annotations
        )

        # eEncryption algorithm
        encrypt_meth = fitz.PDF_ENCRYPT_AES_256

        pdf.save(outfile, encryption=encrypt_meth, user_pw=password,
                 permissions=perm)

        if pdf.save:
            print("PDF encrypted")

この関数は、暗号化された PDF を outfile 引数で渡したファイル パスに保存します。

エクスプローラーで暗号化されたファイルを表示するプログラムの出力

暗号化された PDF の復号化

復号化関数を作成します。この関数は、最初に入力ファイルが暗号化されているかどうかを確認します。暗号化されている場合は、ユーザーにパスワードの入力を求めるプロンプトが表示されます。次に、提供されたパスワードを使用して PDF を開こうとします。パスワードが正しければ、fitz は PDF を復号化します。次に、復号化された PDF の内容を別の保護されていない PDF ファイルに保存します。

def decrypt_pdf(file):
    if pdf_is_encrypted(file):
        password = input('Enter pdf password: ')
        pdf = fitz.open(file)

        if pdf.authenticate(password):
            pdf.save('decrypted.pdf')


            if pdf.save:
                print("PDF decrypted")
        else:
            print('Incorrect Password')

このコードは、保護されていない PDF を現在の作業ディレクトリに保存します。

エクスプローラーで復号化されたファイルを表示するプログラムの出力

は、protected.pdfファイルを復号化し、 decrypted.pdfとして保存しました。

プログラムの流れを制御する

プログラムの流れを制御するメイン関数を作成します。入力 PDF のパスを保存し、暗号化および復号化関数を呼び出し、入力パラメーターを渡します。

def main():
    # replace the file path with either that of
    # the pdf to be encrypted or decrypted
    file = 'sample.pdf'
    pdf = fitz.open(file)
    password = 'pass123'
    encrypt_pdf_file(pdf, password, 'protected.pdf', file)
    decrypt_pdf(pdf)

暗号化された PDF ファイルの名前を変更するには、「protected.pdf」を独自の名前に置き換えます。拡張子は「.pdf」のままにしてください。

メイン メソッドの実行

メイン メソッドが最初に実行されるようにします。

if __name__ == '__main__':
    main()

このコードは、スクリプトがインポートされたモジュールではなく、メイン プログラムとして実行されているかどうかを確認します。メイン プログラムの場合は、メイン関数を呼び出します。

Python スキルを向上させる

Python で PDF の暗号化/復号化プログラムを作成するのは楽しいですが、やりがいのあるプロジェクトです。これは、言語を使用して Python のスキルとマスター ファイル処理を練習するのに役立ちます。

スキルを向上させるには、より多くの Python プロジェクトに取り組む必要があります。これにより、より多くの Python ライブラリやモジュールとやり取りすることができます。Python は非常に多様であり、多くの領域に適用してさまざまなタスクを実行できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です