반응형
Jasypt(Java Simplified Encryption) : 특정 값을 암호화해주는 라이브러리
공식 홈페이지 : http://www.jasypt.org/
암호화 라이브러리를 찾게 된 이유는 yml나 properties에 민감정보가 들어가게 되는데 그대로 노출시키는 것 보다는 암호화를 한번 거치게 되는것이 안전하다고 판단했기 때문이다.
- 의존성 추가
MAVEN
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency>
Gradle
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'
- JasyptConfig 클래스 추가
- 암호화
암호화 값은 아래와 같은 방식으로 찍어볼 수 있고 암호화 값을 확인할수있는 사이트도 있다. - 암호화 키관리
그대로 키값을 노출시키면 라이브러리를 사용하는 의미가 없어지기 때문에 노출되지 않도록 키 관리가 필요하다.
import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
@Configuration
@EnableEncryptableProperties
public class JasyptConfig {
@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor(){
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPoolSize("1"); // 인스턴스 Pool
encryptor.setPassword("enc_key"); // 암호화 키
config.setAlgorithm("PBEWithMD5AndDES"); // 사용 알고리즘
config.setStringOutputType("base64"); // 인코딩 방식
config.setKeyObtentionIterations("1000"); // 암호화 키를 얻기위해 반복하는 해시 횟수
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); // salt 생성 클래스
encryptor.setConfig(config);
return encryptor;
}
}
@Test
void jasypt() {
String url = "my_db_url";
String username = "my_db_username";
String password = "my_db_password";
System.out.println(jasyptEncoding(url));
System.out.println(jasyptEncoding(username));
System.out.println(jasyptEncoding(password));
}
public String jasyptEncoding(String value) {
String key = "my_jasypt_key";
StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor();
pbeEnc.setAlgorithm("PBEWithMD5AndDES");
pbeEnc.setPassword(key);
return pbeEnc.encrypt(value);
}
반응형
'Backend > JAVA' 카테고리의 다른 글
[Noti] 알림 전송 방식 4가지 ( SMS, Email, Kakao, Push ) (0) | 2024.07.04 |
---|---|
[Algorithm] 데일리 백준 (0) | 2024.05.17 |
[Algorithm] 데일리 백준 (0) | 2024.05.14 |
[Algorithm] 데일리 백준 (0) | 2024.05.10 |
[Algorithm] 데일리 백준 (0) | 2024.05.08 |