평문 저장이 부담될때 써보자 application.yml 에 ENC(asdfqawf123r13==)이런느낌으로
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>${jasypt.spring.boot.starter.version}</version>
</dependency>
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.jasypt.salt.RandomSaltGenerator;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import lombok.extern.slf4j.Slf4j;
@Slf4j
class JasyptTest {
private StringEncryptor devStringEncryptor;
@BeforeEach
public void before() {
log.debug("==========");
devStringEncryptor = devStringEncryptor();
}
@AfterEach
public void after() {
log.debug("==========");
}
StringEncryptor devStringEncryptor() {
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword("testpassword");
config.setAlgorithm("PBEWITHSHA256AND256BITAES-CBC-BC");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProvider(new BouncyCastleProvider());
config.setSaltGenerator(new RandomSaltGenerator());
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setConfig(config);
return encryptor;
}
@Test
void jasyptTest() {
String str = "test plain text"; // db
log.debug("plain Text ==> {}", str);
String encrypedtStr = devStringEncryptor.encrypt(str);
log.debug("encrypt Text ENC({})", encryptedStr);
String decryptedStr = devStringEncryptor.decrypt(encryptedStr);
log.debug("decrypted Text ==> {}", decryptedStr);
}
}
configuration으로 등록할때는 클래스에 @Congfigruation 어노테이션을 붙여주고,
StringEncryptor devStringEncryptor() {} 위에 @Bean("jasyptbean")과 같이 설정해준다.
그리고 패스워드는 @Value로 받아오도록 하자.
application.yml 설정은 다음과 같다.
jasypt:
encryptor:
bean: jasyptbean
password: ${JASYPT_PASSWORD}
property:
prefix: ENC(
suffix: )
비밀번호를 환경변수로 하는것도 불만족 스럽다면, PBEConfig에 setPassword시
db에서 조회하여 가져오도록 하는 방법을 고려해보자.
728x90
'개발 > java' 카테고리의 다른 글
| openjdk 12 ~ 21 feature (3) | 2024.11.15 |
|---|---|
| spring cloud task (1) | 2024.11.14 |
| @Aspect로 공통header 처리 (2) | 2024.02.19 |
| springboot threadLocal 테스트 (1) | 2024.01.22 |
| springboot resttemplate config 와 restClient 생성 (1) | 2024.01.19 |