JavaでPDF文書を暗号化、復号化

秘密情報や機密情報を含むPDF文書では、パスワードで暗号化することで、指定された人だけが内容にアクセスできるようにすることができます。 暗号化されたPDF文書の復号化は、誰でも自由にコンテンツにアクセスできるように、文書の一般公開を容易にします。 この記事では、無料の[Free Spire.PDF for Java](https://jp.e-iceblue.com/introduce/free-spire-pdf-for-java.html)を使用して**PDFドキュメントを暗号化または復号化**する方法を説明します。
- **[PDFファイルをパスワードで暗号化](#pdfファイルをパスワードで暗号化)**
- **[PDFファイルからパスワードの解除](#pdfファイルからパスワードの解除)**
## 【依存関係の追加】
この方法は、無料のFree Spire.PDF for Javaが必要ですので、先にjarファイルをインポートしてください。
### 1. Maven
Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加することで、簡単にアプリケーションに JAR ファイルをインポートすることができます。
```XML
<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf.free</artifactId>
        <version>5.1.0</version>
    </dependency>
</dependencies>
```
### 2. 公式サイトよりJarファイルをダウンロード
まず、[Free Spire.PDF for Javaの公式サイト](https://jp.e-iceblue.com/download/free-spire-pdf-for-java.html)よりzipファイルをダウンロードします。zipファイルを解凍し、libフォルダの下にあるSpire.Pdf.jarファイルを依存関係としてプロジェクトにインポートしてください。
## PDFファイルをパスワードで暗号化
PDFファイルを暗号化するためのパスワードには、開くパスワードと権限パスワードの2種類があります。 開くパスワードは、他人がPDFファイルを開くことを制限するもので、開くパスワードでPDFファイルを見るには入力が必要です。 権限パスワードは、印刷、コピー、コメントなど、文書へのアクセスを制限することができます。 PDFファイルが両方のパスワードで暗号化されている場合、どちらか一方のパスワードでPDFファイルを開くことができます。
Free Spire.PDF for Javaでは、**PdfDocument.getSecurity().encrypt()** メソッドを使用すると、オープンパスワードと許可パスワードを同時に設定することができます。 以下、詳しい手順を説明します。
- **PdfDocument** のオブジェクトを作成します。
- **PdfDocument.loadFromFile()** メソッドを使用して、PDFファイルを読み込みます。
- 開くパスワード、権限パスワード、キーサイズ、権限を設定します。
- **PdfDocument.getSecurity().encrypt()** メソッドを使用して、ファイルを暗号化します。
- **PdfDocument.saveToFile()** メソッドを使用して、PDFファイルを保存します。

**Java**
```Java
import java.util.EnumSet;

import com.spire.pdf.PdfDocument;
import com.spire.pdf.security.PdfEncryptionKeySize;
import com.spire.pdf.security.PdfPermissionsFlags;

public class encryptPDF {
    public static void main(String[] args) {

        //PdfDocumentのオブジェクトを作成する
        PdfDocument pdf = new PdfDocument();

        //PDFファイルを読み込む
        pdf.loadFromFile("C:/休暇.pdf");

        //ドキュメントを暗号化する
        PdfEncryptionKeySize keySize = PdfEncryptionKeySize.Key_128_Bit;
        String openPassword = "password";
        String permissionPassword = "permission";
        EnumSet flags = EnumSet.of(PdfPermissionsFlags.Print, PdfPermissionsFlags.Fill_Fields);
        pdf.getSecurity().encrypt(openPassword, permissionPassword, flags, keySize);

        //ドキュメントを保存する
        pdf.saveToFile("暗号化.pdf");
        pdf.close();
    }
}
```
![PDFファイルをパスワードで暗号化](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/08a6636a-47a1-046b-d203-c4cd1b780949.png)

## PDFファイルからパスワードの解除
PDFファイルを復号化するには、**PdfDocument.getSecurity().encrypt()** メソッドを使用して、開くパスワードと権限パスワードを空白値に設定し、パスワードを削除することができます。 以下、操作手順の詳細を説明します。
- **PdfDocument** のオブジェクトを作成します。
- **PdfDocument.loadFromFile()** メソッドを使用して、暗号化されたPDFファイルを読み込みます。
- **PdfDocument.getSecurity().encrypt()** メソッドを使用して、オープンパスワードと許可パスワードを空白値に設定し、ドキュメントを復号化します。
- **PdfDocument.saveToFile()** メソッドを使用して、PDFファイルを保存します。

**Java**
```Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.security.PdfEncryptionKeySize;
import com.spire.pdf.security.PdfPermissionsFlags;

public class decryptPDF {
    public static void main(String[] args) throws Exception {

        //PdfDocumentのオブジェクトを作成する
        PdfDocument pdf = new PdfDocument();

        //パスワードを使って暗号化されたPDFファイルを読み込む
        pdf.loadFromFile("暗号化.pdf", "password");

        //ドキュメントを復号化する
        pdf.getSecurity().encrypt("", "", PdfPermissionsFlags.getDefaultPermissions(), PdfEncryptionKeySize.Key_256_Bit, "permission");

        //ファイルを保存する
        pdf.saveToFile("復号化.pdf");
        pdf.close();
    }
}
```
![PDFファイルからパスワードの解除](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/ef23e4b5-35d2-021d-7b6e-e03df10f78e1.png)

> **Free Spire.PDF for Javaを使用したPDFファイルの暗号化と復号化の紹介は以上です。このツールはまた、PDFファイルの他の多くの操作を行うために使用することができます。あなたがより多くを知りたい場合は、[Spire.PDF for Javaのチュートリアルサイト](https://jp.e-iceblue.com/tutorials/java/spire-pdf-java/pdf-java-program-guide-content.html)に移動してください。また、問題を報告するために[Spire.PDF Forum](https://www.e-iceblue.com/forum/spire-pdf-f7.html)に行くことができます。**