공부/JAVA | JSP&Servlet | Spring

[JAVA] PDF 암호화 (org.apache.pdfbox)

bumcrush 2024. 11. 20. 10:42
반응형

드디어 JAVA 암호화의 마지막..

JAVA로 PDF 파일 암호화 하는 코드를 포스팅한다.

 

전반적인 로직은 이전 포스팅들과 같으나

PDF 암호화는 사용하는 라이브러리가 살짝 다르니,

참고바란다.

(PDF 암호화 라이브러리는 org.apache.pdfbox 를 사용한다.)

 

 pom.xml

- 마지막 'org.apache.pdfbox' 만 사용해도 무방할듯 싶다.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>TEST2</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>


    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.1.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.xmlbeans</groupId>
            <artifactId>xmlbeans</artifactId>
            <version>3.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-compress</artifactId>
            <version>1.23.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>4.1.2</version>
        </dependency>

        <!-- .pdf 파일 암호화 -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.22</version>
        </dependency>

    </dependencies>

</project>

 

 

✅ PDF 암호화 코드

package org.example;


import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.encryption.AccessPermission;
import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy;

import java.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
            String inputFilePath = "C:/test/자격득실확인서.pdf";  // 암호화할 PPTX 파일 경로
            String outputFilePath = "C:/test/자격득실확인서_e.pdf";  // 암호화된 파일 저장 경로
            String password = "930608";  // 암호

        try {
            // PDF 파일 열기
            PDDocument document = PDDocument.load(new File(inputFilePath));

            // 암호화 설정
            //int keyLength = 128; // 키 길이  --> 생략가능
            AccessPermission accessPermission = new AccessPermission();
            StandardProtectionPolicy spp = new StandardProtectionPolicy(password, password, accessPermission);
            //spp.setEncryptionKeyLength(keyLength);
            spp.setPermissions(accessPermission);

            // PDF 파일 암호화
            document.protect(spp);

            // 암호화된 PDF 파일 저장
            document.save(outputFilePath);
            document.close();

            System.out.println("암호화가 완료되었습니다: " + outputFilePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

- inputFilePath 변수 : 암호화 할 pdf 파일 경로 (*확장자 까지 적을것)

- outputFilePath 변수 : pdf 암호화 작업 후 파일을 저장할 경로 (*확장자 까지 적을것)

- password 변수 : pdf 파일에 걸 암호

 

 

실행방법 및 로직은 이전 포스팅과 같으니,

궁금하신분은 이전 포스팅 참고하시면 될 듯 싶습니다.

 

2024.09.07 - [공부/JAVA | JSP&Servlet | Spring] - [JAVA] PPT 암호화 , PPTX 암호화 (org.apache.poi)

2024.09.18 - [공부/JAVA | JSP&Servlet | Spring] - [JAVA] 엑셀 암호화, xls 암호화, xlsx 암호화 (org.apache.poi)

 

반응형