-
[Kotlin] 객체 데이터 암호화 하기프로그래밍 언어/Kotlin 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'프로그래밍 언어 > Kotlin' 카테고리의 다른 글
[Kotlin] Runtime 에 타입정보를 알아내는 방법 (0) 2023.05.15 [Kotlin] static nested Class, inner Class 문법 정리 (0) 2022.11.06 [Kotlin] 코틀린에서 JPA Lazy Loading 적용하기 (0) 2022.09.25 [Kotlin] 코틀린 문법 요약 (자바코드로 훑어보기) (0) 2022.09.19