정의
- .properties 파일을 간단히 암호화 및 복호화하여 관리할 수 있도록 하는 Java 라이브러리
- .properties 파일에 DB 정보와 같은 보안 정보를 암호화하기 위해 주로 사용
- 기본 라이브러리가 아니기 때문에 별도로 import 필요
Gradle
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.3'
기본 세팅
application.properties
jasypt.encryptor.bean=jasyptEncryptor
spring.datasource.password=ENC(jal14ljlkjdaslko2j3c)
- application.properties에 ecnryptor bean을 정의
- encryptor를 통해 암호화한 데이터에 ENC()를 씌워 줘야함 -> 클래스에서 @Value를 통해 ENC()로 씌워진 데이터를 불러오면 자동으로 복호화가 된 데이터가 반환
JasyptConfig
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.salt.RandomSaltGenerator;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JasyptConfig {
String password = "d123123uoiujksdjlakjlueluklsjdln";
@Bean(name = "jasyptEncryptor")
public StringEncryptor stringEncryptor() {
// 문자열 암호화 수행 객체
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setProvider(new BouncyCastleProvider()); // 제공자
encryptor.setPoolSize(2); // 인스턴스 pool 사이즈
encryptor.setPassword(password); // 패스워드
encryptor.setAlgorithm("PBEWithSHA256And256BitAES-CBC-BC"); // 알고리즘
encryptor.setKeyObtentionIterations(1000); // 해싱 반복 횟수
encryptor.setSaltGenerator(new RandomSaltGenerator()); // salt 생성 클래스 (Random)
encryptor.setStringOutputType("base64"); // 인코딩 방식
return encryptor;
}
}
- @Bean에 파라미터로 application.properties에서 정의한 Bean명을 입력하여 Spring IOC 컨테이너가 encryptor Bean을 등록할 수 있도록 설정
- PooledPBEStringEncryptor = Jasypt에서 지원하는 문자열 데이터 암/복호화 객체
- PooledPBEStringEncryptor 객체에 여러가지 set 메소드들을 통해 설정들을 등록
※ 결국 Jasypt 설정도 password가 보안에 민감하므로 Jasypt 사용 시 password는 AWS Secrets Manager 같은 클라우드 제공 서비스를 이용하거나 OS의 환경 변수로 추가하여 관리하는 것이 좋음
알고리즘
- Jasypt는 일반적으로 MD5 해시 함수와 DES 대칭 암호화 알고리즘을 사용하는 PBEWithMD5AndDES를 사용
- 보안성을 높이기 위해 SHA256과 AES 대칭 암호화 알고리즘을 사용하는 PBEWithSHA256And256BitAES-CBC-BC 같은 알고리즘도 사용이 가능함
- PBEWithSHA256And256BitAES-CBC-BC는 AES256이기 때문에 128비트 키(32개 문자열)를 사용
- PBEWithSHA256And256BitAES-CBC-BC에서 BC는 Bouncy Castle Provider를 의미하는데 이는 별도로 import가 필요
implementation 'org.bouncycastle:bcprov-jdk15on:1.61'
Bouncy Castle
- Java와 C#에서 사용할 수 있는 암호화 라이브러리 및 보안 프레임워크
- 지원 암호화 알고리즘 = AES, DES, RSA, DSA, ECC 등
- 지원 해시 함수 = MD5, SHA-1, SHA-256, SHA-512 등
- SSL/TLS 프로토콜의 구현을 제공
'Java > 암호화' 카테고리의 다른 글
암호화 패딩 종류 (0) | 2024.03.18 |
---|---|
블록 암호화 기법 종류 (0) | 2024.03.18 |
암호화 알고리즘 종류 (0) | 2024.03.18 |
javax.crypto.Cipher (0) | 2024.03.18 |
댓글