
Jasypt이란?Jasypt (Java Simplified Encryption)는 Java 애플리케이션에서 암호화와 복호화를 간편하게 처리할 수 있도록 돕는 라이브러리이다. 민감한 정보를 안전하게 보호하기 위해 설계된 Jasypt는 Spring Boot와 쉽게 통합할 수 있어 개발자들에게 매우 유용하다.
(Encryption)암호화는 데이터를 읽을 수 없는 형태로 변환하는 과정이다. 이는 데이터를 보호하고 무단 접근을 방지하는 데 사용된다. 암호화된 데이터는 알고리즘과 비밀 키를 사용하여 변환된다.
(Decryption)복호화는 암호화된 데이터를 원래의 읽을 수 있는 형태로 복원하는 과정이다. 암호화에 사용된 알고리즘과 비밀 키가 필요하다.
(Secret Key)비밀 키는 암호화와 복호화에 사용되는 중요한 요소이다. 키가 노출되면 암호화된 데이터가 쉽게 해독될 수 있기 때문에, 비밀 키는 안전하게 관리해야 한다.
(Algorithm)암호화 알고리즘은 데이터를 암호화하고 복호화하는 데 사용되는 수학적 규칙을 정의한 것이다. 각 알고리즘은 특정한 암호화 방식과 키 길이를 사용하여 데이터를 변환한다.
Jasypt의 주요 기능Jasypt는 Spring Boot와 통합되어 애플리케이션 설정 파일에서 자동으로 암호화된 값을 처리할 수 있다. 설정 파일에서 암호화된 값을 읽고 자동으로 복호화하여 사용할 수 있다.
Jasypt는 다양한 암호화 알고리즘을 지원한다. 따라서 개발자는 애플리케이션의 보안 요구 사항에 맞는 알고리즘을 선택할 수 있다.
| 이름 | 성능 | 용도 | 특징 |
|---|---|---|---|
| PBEWithMD5AndDES | 낮음 | 구형 시스템, 낮은 보안 요구 사항 | MD5 해시와 DES 암호화를 사용. 보안 강도가 낮아 현대 보안 요구 사항에 부족할 수 있음 |
| PBEWithSHA1AndDESede | 중간 | 중간 수준의 보안 요구 사항 | SHA-1 해시와 DESede(Triple DES) 암호화를 사용. DES에 비해 보안 강도가 강화됨 |
| PBEWithSHA256AndAES_256 | 높음 | 높은 보안 요구 사항 | SHA-256 해시와 AES 256비트 암호화를 사용. 매우 강력한 보안을 제공하며 현대 보안 표준을 충족 |
Jasypt는 Spring 기반 애플리케이션와 쉽게 통합되며, 간단한 설정으로 다양한 곳에서 암호화 기능을 사용할 수 있다.
Hibernate 통합: Jasypt를 Hibernate와 통합하면 데이터베이스의 민감한 정보를 자동으로 암호화 및 복호화할 수 있다. AttributeConverter를 사용하여 엔티티 필드에 암호화 로직을 쉽게 적용할 수 있다.
Spring Security 통합: Jasypt를 Spring Security와 통합하여 비밀번호와 같은 민감한 정보를 안전하게 암호화하고 복호화할 수 있다. 커스텀 PasswordEncoder를 구현하여 보안 기능을 강화할 수 있다.
Jasypt 적용하기Jasypt의 기본적인 개념에 대해 다루었으니 이제 실제 Spring Boot 파일에 적용해 보자. 먼저, Jasypt의 실제 동작 단계에 대해 알아보자.
Jasypt의 동작 단계암호화 설정: SimpleStringPBEConfig 또는 PooledPBEStringEncryptor 클래스 등을 사용하여 암호화 설정을 구성한다. 비밀 키와 암호화 알고리즘을 설정한다.
암호화: 입력 데이터를 암호화한다. 이 과정에서는 비밀 키와 설정된 암호화 알고리즘을 사용하여 데이터를 암호화한다.
복호화: 암호화된 데이터를 복호화한다. 암호화와 동일한 비밀 키와 알고리즘을 사용하여 암호화된 데이터를 원래 형태로 복원한다.
Secret Key)Jasypt에서 비밀 키 (Secret Key)는 유출되면 안되는 만큼 설정 파일에 직접 작성하기보단 PC나 IDE 등에서 따로 환경 변수를 설정하는 편이 좋다.
나같은 경우 IntelliJ의 Edit Configurations에서 환경 변수를 설정해 주었다.

Environment variables를 정상적으로 설정했을 경우 사진과 같이 KEY=VALUE 형식이 된다.
로그인 기능에서 필요한 의존성을 pom.xml 의 dependencies에 추가한다.
Maven - pom.xml 파일에 추가<dependencies>
··· 생략 ···
<!-- jasypt (데이터 암호화) -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
··· 생략 ···
</dependencies>
Gradle - build.gradle 파일에 추가implementation 'org.jasypt:jasypt:1.9.3'
yml 또는 properties 파일 설정jasypt:
encryptor:
password: ${ENCRYPT_KEY} # 환경 변수에서 가져옴
algorithm: PBEWithMD5AndDES
key-obtention-iterations: 1000
pool-size: 1
salt-generator-classname: org.jasypt.salt.RandomSaltGenerator
iv-generator-classname: org.jasypt.iv.NoIvGenerator
string-output-type: base64
password: 비밀 키를 의미, 여기선 환경 변수에서 설정한 값을 가져온다.
algorithm: 암호화 알고리즘을 설정한다.
PBEWithMD5AndDES를 사용했지만 실제 애플리케이션에서는 더욱 복잡한 알고리즘을 사용하는 편이 좋다.JasyptConfig 클래스 추가@Configuration
public class JasyptConfig {
@Bean("jasyptStringEncryptor")
public PooledPBEStringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(System.getenv("ENCRYPT_KEY"));
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
}
Spring Boot 애플리케이션에서 Jasypt 설정을 읽어들여 암호화와 복호화를 자동으로 처리하도록 @Configuration 클래스를 추가한다.
@EnableEncryptableProperties 적용@SpringBootApplication
@EnableEncryptableProperties
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
@EnableEncryptableProperties 어노테이션을 사용하면, 애플리케이션의 설정 파일에서 암호화된 값을 직접 읽어와 자동으로 복호화할 수 있다.
Jasypt는 Java 애플리케이션에서 암호화와 복호화를 간편하게 처리할 수 있도록 돕는 강력한 도구이다. Spring Boot와 쉽게 통합되어 설정 파일의 민감한 정보를 안전하게 보호할 수 있으며, 다양한 암호화 알고리즘을 지원하여 애플리케이션의 보안 요구 사항에 맞는 설정이 가능하다.
Jasypt를 통해 민감한 정보를 보호하고 보안을 강화함으로써, 애플리케이션의 신뢰성을 높일 수 있다. 보안을 위해 앞으로 애플리케이션을 개발할 때 사용해 보자!