Jasypt는 public한 곳에 애플리케이션을 배포할 때 DB 계정이나 중요 비밀 키 값들이 평문으로 그대로 저장되어 올라가는 것을 막기 위해 프로퍼티를 간단하게 암호화할 수 있는 라이브러리입니다.
준비
- 의존성 추가
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'
- Bean 설정
encryptor.key를 환경 변수로 등록해 암/복호화 할 때 사용하는 키 값으로 사용합니다.
@Configuration @Profile({"dev","real"}) public class JasyptConfig { @Value("${encryptor.key}") private String password; @Bean("jasyptStringEncryptor") public StringEncryptor stringEncryptor() { PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); SimpleStringPBEConfig config = new SimpleStringPBEConfig(); config.setPassword(password); config.setAlgorithm("PBEWithMD5AndDES"); config.setKeyObtentionIterations("1000"); config.setPoolSize("1"); config.setProviderName("SunJCE"); config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator"); config.setStringOutputType("base64"); encryptor.setConfig(config); return encryptor; } }
저는 instakyuram으로 패스워드를 설정했습니다.

평문 → 암호문
- 아래 사이트에 접속해 키 값을 통해 암/복호화 할 수 있습니다.
- instakyuram의 설정 일부분을 암호화 해서 정상적으로 실행이 되는지 확인해보겠습니다.
datasource: driver-class-name: com.mysql.jdbc.Driver username: root password: password url: jdbc:mysql://localhost:3306/kyuram
root -> oYO/9DBKBBCkp9If+M0cgA== password -> qK5ua96GDU0kmcOu4N8+yRmFESxjLpqz jdbc:mysql://localhost:3306/kyuram -> 2JvUMlda7+XaxKznD63C+6p1KpOgGpWS5MmCkCfP0yWLByds0eM6nrP/svKlbEsP
암호화된 데이터는 ENC(암호화 데이터) 와 같이 암호화 되었다는 표시를 해줘야합니다.
spring: config: activate: on-profile: dev datasource: driver-class-name: com.mysql.jdbc.Driver username: ENC(oYO/9DBKBBCkp9If+M0cgA==) password: ENC(qK5ua96GDU0kmcOu4N8+yRmFESxjLpqz) url: ENC(2JvUMlda7+XaxKznD63C+6p1KpOgGpWS5MmCkCfP0yWLByds0eM6nrP/svKlbEsP)
실행
JPA를 의존성에 추가하고 application.yml에 JPA 설정을 추가하고 애플리케이션을 실행해봅니다.
JPA를 의존성에 추가하면 DB Connection이 제대로 이루어지지 않는다면 애플리케이션은 실행되지 않을 것 입니다.
- 정상적으로 암호문을 입력했을 때 → 정상적으로 실행 되었습니다.
spring: config: activate: on-profile: dev datasource: driver-class-name: com.mysql.jdbc.Driver username: ENC(oYO/9DBKBBCkp9If+M0cgA==) password: ENC(qK5ua96GDU0kmcOu4N8+yRmFESxjLpqz) url: ENC(2JvUMlda7+XaxKznD63C+6p1KpOgGpWS5MmCkCfP0yWLByds0eM6nrP/svKlbEsP) jpa: show-sql:true hibernate: ddl-auto: none generate-ddl:false defer-datasource-initialization:true

- 임의로 암호문을 망가뜨렸을 때 → 실행되지 않습니다.

