jasypt

2024. 11. 13. 16:56·개발/java

평문 저장이 부담될때 써보자 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
'개발/java' 카테고리의 다른 글
  • openjdk 12 ~ 21 feature
  • spring cloud task
  • @Aspect로 공통header 처리
  • springboot threadLocal 테스트
yunapapa
yunapapa
working on the cloud
    250x250
  • yunapapa
    supermoon
    yunapapa
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • 개발 (20)
        • java (17)
        • web (2)
        • MSX (1)
        • Go (0)
      • CloudNative (50)
        • App Definition & Developeme.. (17)
        • Orchestration & Management (4)
        • Runtime (3)
        • Provisioning (7)
        • Observability & Analysis (14)
        • event review (5)
      • AWS (7)
      • 환경관련 (17)
      • 취미생활 (0)
        • 맛집 (0)
        • 게임 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • CNCF Past Events
    • Kubernetes Korea Group
  • 공지사항

  • 인기 글

  • 태그

    Pinpoint
    AWS
    티스토리챌린지
    APM
    istio
    오블완
    Java
    springboot
    devops
    k8s
    gitlab
    dop-c02
    helm
    OpenShift
    kubernetes
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
yunapapa
jasypt
상단으로

티스토리툴바