프로그래밍 언어/Kotlin
[Kotlin] 객체 데이터 암호화 하기
DevPing9_
2023. 5. 8. 18:16
리소스 경로가 포함된 객체들은 Base64 로 암호화할 시, `/` 같은 문자가 포함되기에 Hex 로 암호화하는것이 좋다.
decrpyt 의 반환형은 제네릭으로 이쁘게 처리하면 더 완벽하겠다.
코드 스니펫
object CipherEncryptor {
private const val secretKey = "Ping9's SecretKey"
private val log = LoggerFactory.getLogger(HMacEncryptor::class.java)
fun encrypt(source: Any, objectMapper: ObjectMapper): String =
Cipher.getInstance("AES/CBC/PKCS5Padding").run {
init(
Cipher.ENCRYPT_MODE,
SecretKeySpec(secretKey.toByteArray(), "AES"),
IvParameterSpec(byteArrayOf(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
)
String(Hex.encode(doFinal(objectMapper.writeValueAsString(source).toByteArray())))
}
fun decrypt(source: String, objectMapper: ObjectMapper, clazz: Class<*>): Any =
Cipher.getInstance("AES/CBC/PKCS5Padding").run {
try {
init(
Cipher.DECRYPT_MODE,
SecretKeySpec(secretKey.toByteArray(), "AES"),
IvParameterSpec(byteArrayOf(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
)
objectMapper.readValue(String(doFinal(Hex.decode(source.toByteArray()))), clazz)
} catch (e: Exception) {
log.info("HMac decryption failed.")
e.printStackTrace()
throw CannotDecryptSourceException()
}
}
}728x90