ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [암호화] property 암호화하기
    Health-Genie 2023. 4. 4. 23:59
    728x90

    Node에는 .env 파일이 있다면, Java에는 Jasypt가 있다

    jasypt란

    개발자가 암호화 작동 방식에 대한 깊은 지식 없이도 자신의 프로젝트에 기본 암호화 기능을 추가할 수 있도록 하는 java 라이브러리

     

    특징

    • 간편한 단방향 및 양방향 암호화 기술 제공
    • 스레드로부터 안전함 ( 스프링 같은 싱글톤 환경에서 동기화 걱정없이 사용 가능 )
    • 원본 문자 집합에 대한 제약없이 사용 가능 ( 일본, 한국어 등의 언어 지원 )

     

    Jasypt 사용법

    1. Gradle 추가

    implementation "com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.3"

     

    2. Jasypt 파일 ( configuration File ) & main 쓰래드 있는 파일에 어노테이션 추가

    import lombok.extern.slf4j.Slf4j;
    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.context.annotation.PropertySource;
    
    @Configuration
    @Slf4j
    @EnableEncryptableProperties
    public class JasyptConfig {
    
        @Bean("jasyptStringEncryptor")
        public StringEncryptor stringEncryptor() {
            PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
            SimpleStringPBEConfig config = new SimpleStringPBEConfig();
            config.setPassword(System.getProperty("jasypt.encryptor.password"));
            // "jasypt.encryptor.password" 얘는 나중에 VM 옵션에 넣기
            config.setAlgorithm("PBEWithMD5AndDES");
            config.setKeyObtentionIterations("1000");
            config.setPoolSize("1");
            config.setProviderName("SunJCE");
            config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
            config.setStringOutputType("base64");
            encryptor.setConfig(config);
            return encryptor;
        }
    }
    
    
    
    
    @SpringBootApplication
    public class CafeManagementSystemApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(CafeManagementSystemApplication.class, args);
        }
    
    }

     

    1. PooledPBEStringEncryptor에서 PBE는 하나의 알고리즘이다.
    2. setKeyObtentionIterations는 해싱 횟수 ( 1000번 암호화를 시킨다는 의미 )
    3. setSaltGeneratorClassName는 random한 salt 클래스를 생성 하겠다 

    세팅 값

    3. 속성값 암호화 하기

    www.devglan.com/online-tools/jasypt-online-encryption-decryption

     

    Programming Blog Article Feeds as per your Interest | DevGlan

    Best programming article feeds as per your Interest on different technologies. Subscribe to any technology and explore the best articles from around the web.

    www.devglan.com

     

    다른 방법으로는 학습용으로 Test 폴더에 ENC에 넣을 내용을 Test file에서 구해준다

    @SpringBootTest
    class JasyptConfigTest {
    
        @Test
        void encryptTest() {
            String id = "root";
            String password = "test";
    
            System.out.println(jasyptEncoding(id));
            System.out.println(jasyptEncoding(password));
        }
    
        public String jasyptEncoding(String value) {
            String key = "test_code_password";
            StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor();
            pbeEnc.setAlgorithm("PBEWithMD5AndDES");
            pbeEnc.setPassword(key);
            return pbeEnc.encrypt(value);
        }
    
    }

    값이 나오면 yml 파일에 username = ENC(암호화된 내용) 이렇게 적어주면 된다

     

     

    4. application.yml 파일

    jasypt:
      encryptor:
        bean: jasyptStringEncryptor
        property:
          prefix: ENC(
          suffix: )

     

    5. 암호화된 값을 ENC()에 넣어주기

    username = ENC(uH7rMz8dnT9CZ4InB1UOEQ==)
    password = ENC(HeAElByZwRlcMUj60b8TCg==)

     

    6. 외부에서 password 전달

     

    - build.gradle에 추가

    test {
        useJUnitPlatform()
        systemProperty 'jasypt.encryptor.password', findProperty("jasypt.encryptor.password")
    }

     

    - 구성편집 > VM 옵션

    -Djasypt.encryptor.password=비밀번호를 암호화할때 사용하는 키

     

    돌려보면 될거야~!!


    기존에 걸로 돌리면 test 돌릴시 /application.yml을 찾지 못한다는 에러 발생.

    jasypt config 파일에 있던 애노테이션 수정 했습니다.

Designed by Tistory.