티스토리 뷰

설정파일에 비밀번호와 같은 민감정보를 저장하는 경우가 있는데, 보안을 위해 암호화 하는 방법을 알아보겠다.

암호화에는 jasypt( Java Simplified Encryption ) 자바 암호화 라이브러리를 사용하였다.

 

먼저, Springboot 용 라이브러리 및 BouncyCastle 라이브러리 를 추가한다.

compile (group: 'com.github.ulisesbocchio', name: 'jasypt-spring-boot-starter', version: '2.1.1')
compile group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.61'

Configuration 클래스에 @EnableEncryptableProperties를 추가해주고, 암호화에 사용할 빈을 생성한다.

예제에서는 PBE( Password Based Encryption ) 를 사용하고, SHA256, AES128 사용을 위해 BouncyCastle 라이브러리를 사용한다.

BouncyCastle 은 PBE에 보다 많은 알고리즘을 제공해 준다.

@Configuration
@EnableEncryptableProperties
public class PropertyEncyptConfiguration {

    @Bean("encryptorBean")
    public PooledPBEStringEncryptor stringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setProvider(new BouncyCastleProvider());
        encryptor.setPoolSize(2);
        encryptor.setPassword("xoxo");
        encryptor.setAlgorithm("PBEWithSHA256And128BitAES-CBC-BC");
        return encryptor;
    }
}

테스트 코드에, 암호화할 데이터를 암복호화 해본다.

PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setProvider(new BouncyCastleProvider());
encryptor.setPoolSize(2);
encryptor.setPassword("xoxo");
encryptor.setAlgorithm("PBEWithSHA256And128BitAES-CBC-BC");

String plainText = "test";
String encryptedText = encryptor.encrypt(plainText);
String decryptedText = encryptor.decrypt(encryptedText);
System.out.println("Enc:"+encryptedText+", Dec:"+decryptedText);
Enc:iLe7hTPNHCF+o2vbKDpict0DKEhtSTBHuJk4mw1Tiheg6WdSwyJ96B1hejJTf+sp, Dec:test

 

설정 파일에, 암호화를 하는 bean 이름을 지정해 주고, 암호화된 내용을 작성해 준다.

jasypt:
  encryptor:
    bean: encryptorBean
    
password: ENC(iLe7hTPNHCF+o2vbKDpict0DKEhtSTBHuJk4mw1Tiheg6WdSwyJ96B1hejJTf+sp)

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함