728x90
Jasypt
Java Simplified Encryption의 약자로, 자바로 간단히 암호화할 수 있게 도와주는 라이브러리
파일트리
├ src
│ └─ main
│ │ ├─ JasyptConfig.kt
│ │ └─ KotlinStudyApplication.kt
│ └─ resources
│ ├─ application.yml
│ └─ jasypt-encryptor-password.txt
└─ .gitignore
1. build.gradle에 jasypt-spring-boot-starter 추가
dependencies {
implementation ("com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.3")
... 생략
}
2. yaml 파일에 Jasypt 설정 정보 추가
# Jasypt
jasypt:
encryptor:
bean: jasyptStringEncryptor # Jasypt Config 파일에서 등록하는 빈의 이름
algorithm: PBEWithMD5AndDES # 암/복호화에 사용되는 알고리즘
pool-size: 2 # 암호화 요청을 담고 있는 pool의 크기
string-output-type: base64 # 암호화 이후에 어떤 형태로 값을 받을지 설정. base64 / hexadecimal을 선택
key-obtention-iterations: 100000 # 암호화 키를 얻기 위해 반복해야 하는 해시 횟수
3. jasypt-encryptor-password 파일 생성
# 패스워드 설정
4.Jasypt Config 파일 생성
@Configuration
@EnableEncryptableProperties
class JasyptConfig {
@Value("\${jasypt.encryptor.algorithm}")
private val algorithm: String? = null
@Value("\${jasypt.encryptor.pool-size}")
private val poolSize = 0
@Value("\${jasypt.encryptor.string-output-type}")
private val stringOutputType: String? = null
@Value("\${jasypt.encryptor.key-obtention-iterations}")
private val keyObtentionIterations = 0
val log = LoggerFactory.getLogger(javaClass)
@Bean
fun jasyptStringEncryptor(): StringEncryptor {
val encryptor = PooledPBEStringEncryptor()
encryptor.setPoolSize(poolSize)
encryptor.setAlgorithm(algorithm)
encryptor.setPassword(jasyptEncryptorPassword)
encryptor.setStringOutputType(stringOutputType)
encryptor.setKeyObtentionIterations(keyObtentionIterations)
val source = "변환할 데이터"
log.info("plane :: {}, encrypt :: {}", source, encryptor.encrypt(source))
return encryptor
}
private val jasyptEncryptorPassword: String
private get() = try {
val resource = ClassPathResource("jasypt-encryptor-password.txt")
Files.readAllLines(Paths.get(resource.uri)).stream().collect(Collectors.joining(""))
} catch (e: IOException) {
throw RuntimeException("Not found Jasypt password file.")
}
}
5. 변환한 데이터를 yml 파일에 적용
spring:
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb:
username:
password: ENC([암호화값])
6. jasypt-encryptor-password 파일 .gitignore에 추가
/src/main/resources/jasypt-encryptor-password.txt
728x90