[java] Apache Tika 와 문서 암호화

Apache Tika는 다양한 파일 형식의 문서를 추출하고 처리하기 위한 오픈 소스 자바 라이브러리입니다. 이 글에서는 Apache Tika를 사용하여 문서를 추출한 후, 추출된 문서를 암호화하는 방법에 대해 알아보겠습니다.

Apache Tika 사용

먼저, Apache Tika를 사용하여 문서를 추출하는 방법을 살펴보겠습니다.

  1. Apache Tika를 다운로드하고 프로젝트에 추가합니다.

  2. 다음의 코드를 사용하여 문서를 추출합니다.

import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.ToXMLContentHandler;
import org.xml.sax.ContentHandler;

import java.io.FileInputStream;
import java.io.InputStream;

public class DocumentExtractor {
    public static void main(String[] args) {
        try {
            // 추출할 문서 파일 경로 설정
            String filePath = "path/to/document";
            
            // 문서 파일을 InputStream으로 열기
            InputStream input = new FileInputStream(filePath);
            
            // Tika Parser 생성
            Parser parser = new AutoDetectParser();
            
            // XML ContentHandler 생성
            ContentHandler handler = new ToXMLContentHandler();
            
            // 문서 추출
            parser.parse(input, handler, null, null);
            
            // 추출된 결과를 문자열로 얻기
            String extractedText = handler.toString();
            
            // 추출된 결과 사용
            System.out.println(extractedText);
            
            // Stream과 Parser를 닫기
            input.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위 코드는 Apache Tika를 사용하여 주어진 문서 파일을 추출하는 간단한 예시입니다. path/to/document를 실제 문서 파일 경로로 변경하고 실행하면 해당 문서의 추출된 내용을 콘솔에 출력할 수 있습니다.

문서 암호화

추출된 문서를 암호화하기 위해서는 암호화 알고리즘을 사용해야 합니다. 여러 가지 암호화 알고리즘 중 대표적인 예로 AES(Advanced Encryption Standard)를 사용하도록 하겠습니다.

Java에서 AES 암호화를 위해 javax.crypto 패키지를 사용할 수 있습니다. 다음은 AES 암복호화 예시 코드입니다.

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Arrays;
import java.util.Base64;

public class AesEncryption {
    private static final String KEY = "your-secret-key";
    private static final String ALGORITHM = "AES";

    public static String encrypt(String text) throws Exception {
        byte[] keyBytes = Arrays.copyOf(KEY.getBytes("UTF-8"), 16);
        SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, ALGORITHM);
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
        byte[] encryptedBytes = cipher.doFinal(text.getBytes("UTF-8"));
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    public static String decrypt(String encryptedText) throws Exception {
        byte[] keyBytes = Arrays.copyOf(KEY.getBytes("UTF-8"), 16);
        SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, ALGORITHM);
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
        byte[] encryptedBytes = Base64.getDecoder().decode(encryptedText);
        byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
        return new String(decryptedBytes, "UTF-8");
    }

    public static void main(String[] args) {
        try {
            String originalText = "Hello, world!";
            String encryptedText = encrypt(originalText);
            String decryptedText = decrypt(encryptedText);

            System.out.println("Original text: " + originalText);
            System.out.println("Encrypted text: " + encryptedText);
            System.out.println("Decrypted text: " + decryptedText);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위 코드에서 your-secret-key를 실제 사용할 비밀 키로 변경하고, 문서를 추출한 후에 암호화하거나 암호화된 문서를 복호화하여 사용할 수 있습니다. 암호화된 문서는 Base64 인코딩된 문자열로 반환되며, 복호화할 때 Base64 디코딩하여 원본 문서를 얻을 수 있습니다.

마무리

Apache Tika를 사용하여 문서를 추출하고, 추출된 문서를 보안을 위해 암호화하는 방법에 대해 알아보았습니다. 이를 활용하면 다양한 문서 형식의 내용을 추출하고, 암호화하여 안전하게 보호할 수 있습니다.

참고 문서: