본문 바로가기

Backend/JAVA

[Jasypt] 암호화 라이브러리

반응형

Jasypt(Java Simplified Encryption) : 특정 값을 암호화해주는 라이브러리

공식 홈페이지 : http://www.jasypt.org/

 

암호화 라이브러리를 찾게 된 이유는 yml나 properties에 민감정보가 들어가게 되는데 그대로 노출시키는 것 보다는 암호화를 한번 거치게 되는것이 안전하다고 판단했기 때문이다.

 

  1. 의존성 추가
    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'
  2. JasyptConfig 클래스 추가


  3. 암호화
    암호화 값은 아래와 같은 방식으로 찍어볼 수 있고 암호화 값을 확인할수있는 사이트도 있다.

  4. 암호화 키관리
    그대로 키값을 노출시키면 라이브러리를 사용하는 의미가 없어지기 때문에 노출되지 않도록 키 관리가 필요하다.
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