Jasypt란?

개발자가 암호화 작동 방식에 대한 깊은 지식 없이도 최소한의 노력으로 자신의 프로젝트에 기본 암호화 기능을

추가할 수 있도록 하는 Java 라이브러리입니다.

 

자바 외에도 Java + Spring, Java + Hibernate 등 여러 프레임 워크에서 암복호화를 지원해주는 오픈소스입니다.

 

저는 이 Jasypt를 활용해서 yaml 파일에 있는 민감한 정보(DB 계정 비밀번호 등)을 암호화 하는데 사용했습니다.

 

 

 

1. build.gradle에 dependency 추가

    // Jasypt
    implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'

 

 

 

 

2.  config 폴더에 JasyptConfig 파일 생성 및 (아래의)코드 추가

@Configuration
public class JasyptConfig {

    @Value("${jasypt.encryptor.password}")
    private String encryptKey;

    @Bean("jasyptStringEncryptor")
    public StringEncryptor stringEncryptor(){
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(encryptKey);
        config.setPoolSize("1");
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setStringOutputType("base64");
        config.setKeyObtentionIterations("1000");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        encryptor.setConfig(config);
        return encryptor;
    }
}

 

 

 

3.  테스트 코드로 Jasypt를 사용해 암호화

public class JasyptTest extends JasyptConfig {

    @Test
    public void jasypt_encrypt_decrypt_test() {
        String plainText = "plainText";

        StandardPBEStringEncryptor jasypt = new StandardPBEStringEncryptor();
        jasypt.setPassword("password");

        String encryptedText = jasypt.encrypt(plainText);
        String decryptedText = jasypt.decrypt(encryptedText);

        System.out.println(encryptedText);

        assertThat(plainText).isEqualTo(decryptedText);
    }
}
  • Jasypt를 사용해 각 값들을 암호화 합니다.
  • 테스트를 실행해서 나온 암호화된 데이터들을 yml에 입력합니다.

* 테스트 코드 없이 아래의 사이트에서도 암호화 및 복호화가 가능합니다.

https://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

 

 

 

4. 암호화된 값 yml에 입력

  • 암호화된 값을 입력할 때는 ENC(암호화된 값) 형식으로 입력합니다.
  • jasypt에 대한 yml 값도 위 사진처럼 입력합니다.

 

5. jasypt 키값 VM option에 추가

키값을 yml에 그냥 추가하는 방법도 있지만 그러면 암호화한 값을 복호화 하는 키가 노출 되는 것이기 때문에 VM option을 통해
환경변수로 키 값을 입력하는 방식을 사용했습니다.

 

인텔리제이 상단 메뉴에서

Run -> Edit Configurations

 

 

위에 해당하는 부분에 

-Djasypt.encryptor.password=1234

의 형식으로 비밀번호(키 값)을 입력해줍니다.

 

 

그리고 build.gradle의 test 부분에 아래의 문구를 추가해줍니다.

systemProperty "jasypt.encryptor.password", System.getProperties().get("jasypt.encryptor.password")

 

이렇게 하면 모든 세팅이 완료되었습니다.

고생하셨습니다.

 


궁금한 점

  • Jasypt를 활용하는 다른 방법은 없을지?
    암호화를 하는 라이브러리이기 때문에 다른 곳에도 사용할 수 있지만
    스프링에서는 스프링 시큐리티의 PasswordEncoder가 있어서 굳이 사용할 이유는 없는 것 같습니다.

  • PBEWithMD5AndDES 알고리즘 이란?
    -> 문자 그대로 풀어 보면 "MD5와 DES를 이용한 패스워드 기반 암호화" 정도로 해석될 수 있습니다.
    일반적으로 취약하다고 알려져 있는 MD5와 DES 알고리즘을 사용한다
    PBE(Password Based Encryption, 암호 기반 암호화) 알고리즘은 암호를 기반으로 하는 암호화 알고리즘으로
    암호는 사용자가 스스로 파악하고 무작위 수를 섞어 다중 암호화하는 방법으로 데이터의 안정성을 확보하는 것이 특징이다.

 

 

참고한 자료들

  • (벨로그 sixhustle) Jasypt => 링크
  • (벨로그 haeny-dev) [Jasypt] yaml 파일의 암호화 => 링크

 

 

 

 

 

반응형

+ Recent posts