Jasypt 소개
Jasypt(Java Simplified Encryption)는 자바 언어용으로 설계된 간단한 암호화 도구입니다.
이 도구는 주로 개발자가 데이터를 보호하고 보안을 강화하기 위해 사용됩니다.
Jasypt는 다양한 암호화 기술을 제공하며, 주로 데이터베이스 비밀번호, 사용자 인증 정보, 설정 파일 등을 보호하는 데 사용됩니다.
Jasypt 주요 특징
1. 간단한 사용법: Jasypt는 사용하기 쉽고 간단한 API를 제공하여 개발자가 쉽게 암호화 및 복호화를 수행할 수 있습니다.
2. 다양한 알고리즘 지원: Jasypt는 다양한 암호화 알고리즘을 지원합니다. 이는 강력한 보안을 위해 필요한 경우에 선택할 수 있습니다.
3. 다양한 통합 옵션: Jasypt는 다양한 플랫폼과 프레임워크에서 사용할 수 있습니다. 예를 들어, Spring Framework와의 통합이 강력하며, 설정 파일에서 암호화를 쉽게 처리할 수 있도록 지원합니다.
4. 다양한 운영 환경 지원: Jasypt는 Java EE 및 Java SE와 같은 다양한 자바 기반 환경에서 사용할 수 있습니다.
5. Jasypt의 기본 동작은 텍스트 기반의 데이터를 암호화하고 복호화하는 데에 초점을 맞추고 있습니다. 예를 들어, 데이터베이스 연결 문자열이나 프로퍼티 파일에 저장된 비밀번호를 암호화하여 보안을 강화할 수 있습니다.
예를 들어, Spring에서 Jasypt를 사용하여 설정 파일에서 암호화된 비밀번호를 관리할 수 있습니다. 이를 통해 개발자는 민감한 정보를 안전하게 보호할 수 있습니다.
Jasypt 사용 예
1. 의존성 추가 : pom.xml 파일에 Jasypt의 의존성을 추가합니다.
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
2. Configuration 작성 : 복호화 하기 위한 설정을 합니다.
package co.kr.api.config;
import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimplePBEConfig;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.jasypt.salt.RandomSaltGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
@Configuration
@Component
@PropertySource("classpath:application.properties")
public class JasyptConfig {
@Autowired
private Environment environment;
@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(environment.getProperty("pwdKey")); // 암호화 키 (암호화 키의 옵션값 - JVM 옵션)
config.setAlgorithm("PBEWithMD5AndDES"); // 암호화 방식
config.setKeyObtentionIterations("1000"); // 암호화 키를 얻기위해 반복해야하는 해시 횟수
config.setPoolSize("1"); // 암호화 요청의 pool 크기 (설정하지 않을 경우 NULL)
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64"); // 암호화 이후 어떤 형태로 값 받을지
((SimplePBEConfig) config).setSaltGenerator(new RandomSaltGenerator());
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setConfig(config);
return encryptor;
}
}
3. 암호화 값 생성 : 암호화 된 문자열을 생성하기 위한 Class 입니다.
package co.kr.api.util;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
public class JasyptConfigUtils {
public static String jasyptEncoding(String value) {
String key = "password"; // 암호화 키
StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor();
pbeEnc.setAlgorithm("PBEWithMD5AndDES");
pbeEnc.setPassword(key);
return pbeEnc.encrypt(value);
}
public static void main(String[] args) {
String dbPwd = "암호화 할 대상";
System.out.println(jasyptEncoding(dbPwd));
}
}
4. 암호화 문자열 추가 : application.properties 또는 application.yml 파일에 암호화 관련 설정을 추가합니다.
- 원본 값 대신에 ENC(암호화된문자열) 형식으로 속성 값을 설정합니다.
- Jasypt는 해당 값을 암호화하고 자동으로 복호화하여 사용합니다.
# DB 비밀번호
spring.datasource.password=ENV(jYEEDA4/mHdSKBdVos20gxj6nKzQFD/WJjREjfCo5OE=)
5. Spring Boot 실행 : JVM 속성값으로 암호화 KEY를 가져와 실행합니다.
'IT' 카테고리의 다른 글
[git] 커밋 로그 파일 다운로드 (44) | 2023.08.04 |
---|---|
[JAVA] 마스킹 처리 하기 (21) | 2023.07.21 |
[MariaDB] Scheduling DB backup / mysqldump / crontab (0) | 2023.02.01 |
[Spring] Rest Template - post file type (0) | 2023.01.27 |
[Java] Jackson ObjectMapper - @JsonRootName 사용 (0) | 2023.01.03 |