[java] Jasypt를 활용한 자바 파일 시스템의 암호화 및 복호화

자바 개발 시 파일 시스템의 보안과 관련된 문제는 항상 중요한 요소입니다. 암호화를 통해 파일을 안전하게 저장하고 복호화를 통해 필요한 경우에만 액세스할 수 있도록 하는 것은 보안을 강화하는 좋은 방법입니다. 이번 튜토리얼에서는 Jasypt 라이브러리를 사용하여 자바 파일 시스템의 암호화와 복호화를 수행하는 방법을 알아보겠습니다.

1. Jasypt 라이브러리 설치

Jasypt는 다양한 암호화 알고리즘과 기능을 제공하는 자바 라이브러리입니다. 먼저 Jasypt를 다운로드하여 프로젝트에 추가해야 합니다. Jasypt는 Maven Central Repository에서 제공되므로 Maven을 사용하는 경우 pom.xml 파일에 다음 종속성을 추가할 수 있습니다.

<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt</artifactId>
    <version>1.9.3</version>
</dependency>

Gradle을 사용하는 경우 build.gradle 파일에 다음 종속성을 추가할 수 있습니다.

compile group: 'org.jasypt', name: 'jasypt', version: '1.9.3'

또는 Jasypt의 공식 웹 사이트(https://www.jasypt.org)에서 JAR 파일을 직접 다운로드하여 프로젝트 빌드 경로에 추가할 수도 있습니다.

2. 파일 암호화

Jasypt를 사용하여 파일을 암호화하는 예제를 살펴보겠습니다. 우선 암호화할 파일과 암호화 키를 준비해야 합니다. 다음은 파일 암호화를 수행하는 메소드의 예시입니다.

import org.jasypt.util.text.BasicTextEncryptor;

public class FileEncryptionUtils {

    public void encryptFile(String filePath, String encryptionKey) {
        BasicTextEncryptor encryptor = new BasicTextEncryptor();
        encryptor.setPassword(encryptionKey);
        
        try (FileInputStream fis = new FileInputStream(filePath);
             FileOutputStream fos = new FileOutputStream(filePath + ".encrypted")) {
            byte[] inputBytes = new byte[(int) fis.available()];
            fis.read(inputBytes);
            
            String encryptedText = encryptor.encrypt(new String(inputBytes));
            fos.write(encryptedText.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 예제에서는 Jasypt의 BasicTextEncryptor 클래스를 사용하여 파일을 암호화합니다. encryptFile 메소드는 파일 경로와 암호화 키를 매개변수로 받아와 파일을 읽고 암호화된 텍스트로 변환한 후 새로운 파일에 저장합니다.

3. 파일 복호화

암호화된 파일을 복호화하는 예제를 살펴보겠습니다. 다음은 파일 복호화를 수행하는 메소드의 예시입니다.

import org.jasypt.util.text.BasicTextEncryptor;

public class FileEncryptionUtils {

    public void decryptFile(String filePath, String decryptionKey) {
        BasicTextEncryptor encryptor = new BasicTextEncryptor();
        encryptor.setPassword(decryptionKey);
        
        try (FileInputStream fis = new FileInputStream(filePath);
             FileOutputStream fos = new FileOutputStream(filePath.replace(".encrypted", ""))) {
            byte[] inputBytes = new byte[(int) fis.available()];
            fis.read(inputBytes);
            
            String decryptedText = encryptor.decrypt(new String(inputBytes));
            fos.write(decryptedText.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 예제에서도 BasicTextEncryptor 클래스를 사용하여 파일을 복호화합니다. decryptFile 메소드는 암호화된 파일 경로와 복호화 키를 매개변수로 받아와 암호화된 파일을 읽고 복호화된 텍스트로 변환한 후 원래 파일 이름으로 새로운 파일에 저장합니다.

4. 실행 예제

위의 예제를 사용하여 파일을 암호화하고 복호화하는 방법을 보여주는 예제 코드입니다.

public class FileEncryptionExample {

    private static final String ENCRYPTION_KEY = "MyEncryptionKey";

    public static void main(String[] args) {
        FileEncryptionUtils fileEncryptionUtils = new FileEncryptionUtils();
        fileEncryptionUtils.encryptFile("path/to/file.txt", ENCRYPTION_KEY);
        fileEncryptionUtils.decryptFile("path/to/file.txt.encrypted", ENCRYPTION_KEY);
    }
}

위의 코드에서는 “path/to/file.txt” 경로의 파일을 암호화한 후 “path/to/file.txt.encrypted” 경로에 저장하고, 다시 복호화하여 원래 파일로 복원합니다. ENCRYPTION_KEY는 사용자가 지정한 암호화 키입니다.

결론

이 튜토리얼에서는 Jasypt 라이브러리를 사용하여 자바 파일 시스템의 암호화와 복호화를 수행하는 방법을 알아보았습니다. 파일을 암호화하여 민감한 데이터를 안전하게 저장하고 필요한 경우에만 복호화하여 데이터에 접근하는 것은 보안을 강화하는 중요한 요소입니다. Jasypt는 다양한 암호화 알고리즘과 기능을 제공하므로 파일 시스템 보안에 관련된 요구사항을 충족하는 데 도움이 될 수 있습니다.

더 많은 정보를 원하시면 Jasypt의 공식 웹 사이트(https://www.jasypt.org)를 참조하세요.