itext5でPDFを暗号化する

itext5でPDFを暗号化する

PDFファイルを暗号化したかったわけではないが、
暗号化したPDFをフィルタリングする機能を作成したかった。
そこで、サンプルの暗号化されたPDFを探したが、256bitAESで暗号化されたファイルが見つからなかった。
しかたないので、適当なPDFを256bitAES暗号化するプログラムを作成した。

itext5を利用している。
暗号化が関連するため、bcprovが必要になる。

下記の2つのjarファイルをeclipseのbuild pathに追加した。

  • itext5-itextpdf-5.5.12.jar
  • bcprov-jdk15on-158.jar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package test.pdf;

import java.io.FileOutputStream;

import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;

public class Enc {
    public static void main(String[] args) {
        System.out.println("start.");
        PdfReader reader = null;
        PdfStamper stamper = null;
        try {
            //
            byte[] ownerPassword = args[0].getBytes();
            byte[] userPassword = args[1].getBytes();
            reader = new PdfReader(args[2]);
            //
            stamper = new PdfStamper(reader, new FileOutputStream(args[3]));
            stamper.setEncryption(userPassword, ownerPassword, PdfWriter.ALLOW_SCREENREADERS, PdfWriter.ENCRYPTION_AES_256);
            //
            System.out.println("end.");
        } catch (Exception e) {
            System.out.println("error. " + e.toString());
        } finally {
            try {
                stamper.close();
            } catch (Exception e) {
                System.out.println("stamper close failed. " + e.toString());
            }
            try {
                reader.close();
            } catch (Exception e) {
                System.out.println("reader close failed. " + e.toString());
            }
        }
    }
}

下記の通り実行すると、暗号化されていないPDFを暗号化した新しいファイルが保存される。

1
2
export CLASSPATH=itext5-itextpdf-5.5.12.jar:bcprov-jdk15on-158.jar:.:$CLASSPATH
java test.pdf.Enc 99999 "" orginal.pdf encrypted.pdf

99999は管理者パスワード
“”はユーザパスワードなしを示している
original.pdfを暗号化し、encrypted.pdfとして出力する。

同じタグの記事
同じカテゴリの記事

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA