# 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.")
}
}