[java] Apache POI를 이용한 Word 문서 암호화

Apache POI는 Java로 작성된 라이브러리로서, Microsoft Office 파일 형식인 Word, Excel, PowerPoint 등을 다룰 수 있는 기능을 제공합니다. 이번 글에서는 Apache POI를 사용하여 Word 문서를 암호화하는 방법에 대해 알아보겠습니다.

1. Apache POI 라이브러리 추가하기

먼저, Maven이나 Gradle과 같은 의존성 관리 도구를 통해 Apache POI 라이브러리를 프로젝트에 추가해야 합니다. 아래는 Maven을 사용하는 경우의 예시입니다.

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

2. Word 문서 암호화하기

암호화하려는 Word 문서 파일을 로드하고, org.apache.poi.poifs.crypt.EncryptionInfo 객체를 생성합니다. 이 객체는 암호화 방법과 암호화 키를 설정하는 데 사용됩니다. 간단한 예시 코드는 아래와 같습니다.

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.poifs.crypt.EncryptionInfo;
import org.apache.poi.poifs.crypt.EncryptionMode;
import org.apache.poi.poifs.crypt.HashAlgorithm;
import org.apache.poi.poifs.crypt.standard.StandardEncryptionInfoBuilder;

import java.io.*;

public class WordEncryptionExample {
    public static void main(String[] args) {
        try {
            File inputFile = new File("input.docx");
            File encryptedFile = new File("encrypted.docx");

            FileInputStream fileInputStream = new FileInputStream(inputFile);
            FileOutputStream fileOutputStream = new FileOutputStream(encryptedFile);

            // 암호화 정보 설정
            EncryptionInfo encryptionInfo = new EncryptionInfo(EncryptionMode.standard);
            encryptionInfo.setEncryptionHeader(EncryptionHeader.standardEncryptionHeader(inputPassword));
            encryptionInfo.setEncryptionHeader(new StandardEncryptionHeader.Builder()
                    .setHashAlgorithm(HashAlgorithm.sha256)
                    .setCipherAlgorithm(CipherAlgorithm.aes192)
                    .setKeySize(192)
                    .setSaltSize(16)
                    .setBlockSize(16)
                    .setFlags(Flags.STD_ENCFORMULA)
                    .setChainingMode(ChainingMode.ecb)
                    .build());

            // 암호화된 파일 생성
            OPCPackage opcPackage = OPCPackage.open(fileInputStream);
            OutputStream encryptedStream = encryptionInfo.getEncryptor().getDataStream(fileOutputStream);
            opcPackage.save(encryptedStream);
            opcPackage.close();

            fileInputStream.close();
            fileOutputStream.close();

            System.out.println("Word 문서가 성공적으로 암호화되었습니다.");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 코드에서 input.docx 파일은 암호화하려는 원본 Word 문서 파일이며, encrypted.docx 파일은 암호화된 Word 문서 파일입니다. inputPassword는 암호화에 사용될 비밀번호입니다.

암호화할 파일을 로드한 후, 암호화 정보를 설정하고 OPCPackage 객체를 생성합니다. OPCPackage 객체를 암호화 정보와 암호화된 파일을 생성하는 메소드에 전달하여 암호화된 파일을 생성합니다.

암호화된 파일은 encrypted.docx로 저장됩니다.

3. 결론

위의 예시 코드를 통해 Apache POI를 사용하여 Word 문서를 암호화하는 방법을 알아보았습니다. 따라서, 보안이 필요한 Word 문서를 제작하고 전달할 때 암호화 기능을 활용할 수 있습니다.

문서와 비밀번호는 보안을 위해 안전한 저장소에 저장하고 공유해야 합니다.

참고 자료