· 4 years ago · Aug 17, 2021, 04:04 PM
1object CryptoUtil {
2 @JvmStatic
3 fun aesEncrypt(value: String, secretKey: String) = AES256.encrypt(value, secretKey)
4
5 @JvmStatic
6 fun aesDecrypt(value: String, secretKey: String) = AES256.decrypt(value, secretKey)
7}
8
9private object AES256 {
10 private fun cipher(opmode: Int, secretKey: String): Cipher {
11 if (secretKey.length != 32) throw RuntimeException("SecretKey length is not 32 chars")
12 val c = Cipher.getInstance("AES/CBC/PKCS5Padding")
13 val sk = SecretKeySpec(secretKey.toByteArray(Charsets.UTF_8), "AES")
14 val iv = IvParameterSpec(secretKey.substring(0, 16).toByteArray(Charsets.UTF_8))
15 c.init(opmode, sk, iv)
16 return c
17 }
18
19 fun encrypt(str: String, secretKey: String): String {
20 val encrypted =
21 cipher(Cipher.ENCRYPT_MODE, secretKey).doFinal(str.toByteArray(Charsets.UTF_8))
22 return String(Base64.encode(encrypted, Base64.DEFAULT))
23 }
24
25 fun decrypt(str: String, secretKey: String): String {
26 val byteStr = Base64.decode(str.toByteArray(Charsets.UTF_8), Base64.DEFAULT)
27 return String(cipher(Cipher.DECRYPT_MODE, secretKey).doFinal(byteStr))
28 }
29}
30