crazy code (kotlin)
object AESUtil {
//加密算法
private const val KEY_ALGORITHM = "AES"
//AES 的 密钥长度,32 字节,范围:16 - 32 字节
private const val SECURE_KEY_LENGTH = 16
//秘钥长度不足 16 个字节时,默认填充位数
private const val DEFAULT_VALUE = "0"
//字符编码
@RequiresApi(Build.VERSION_CODES.KITKAT)
private val CHARSET_UTF8 = StandardCharsets.UTF_8
//加解密算法/工作模式/填充方式
private const val CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding"
//key
private const val SECURE_KEY = "xxxxxForTodo_Key"
//IV
private const val IV_STRING = "xxxxxForTodo_Iv"
@RequiresApi(Build.VERSION_CODES.KITKAT)
fun encrypt(content: String): String? {
try {
// 获得密匙数据
val rawKeyData = getAESKey(SECURE_KEY)
// 从原始密匙数据创建KeySpec对象
val key = SecretKeySpec(rawKeyData, KEY_ALGORITHM)
// Cipher对象实际完成加密操作
val cipher = Cipher.getInstance(CIPHER_ALGORITHM)
// 用密匙初始化Cipher对象
val ivParameterSpec = IvParameterSpec(IV_STRING.toByteArray())
cipher.init(Cipher.ENCRYPT_MODE, key, ivParameterSpec)
// 正式执行加密操作
val encryptByte = cipher.doFinal(content.toByteArray())
return base64.encodeToString(encryptByte, base64.NO_WRAP)
} catch (e: UnsupportedEncodingException) {
e.printStackTrace()
} catch (e: NoSuchAlgorithmException) {
e.printStackTrace()
} catch (e: NoSuchPaddingException) {
e.printStackTrace()
} catch (e: InvalidAlgorithmParameterException) {
e.printStackTrace()
} catch (e: InvalidKeyException) {
e.printStackTrace()
} catch (e: IllegalBlockSizeException) {
e.printStackTrace()
} catch (e: BadPaddingException) {
e.printStackTrace()
}
return null
}
@RequiresApi(Build.VERSION_CODES.KITKAT)
fun decrypt(content: String, secureKey: String): String? {
val data: ByteArray = base64.decode(content, base64.NO_WRAP)
try {
// 获得密匙数据
val rawKeyData = getAESKey(secureKey) // secureKey.getBytes();
// 从原始密匙数据创建一个KeySpec对象
val key = SecretKeySpec(rawKeyData, KEY_ALGORITHM)
// Cipher对象实际完成解密操作
val cipher = Cipher.getInstance(CIPHER_ALGORITHM)
// 用密匙初始化Cipher对象
val initParam = IV_STRING.toByteArray()
val ivParameterSpec = IvParameterSpec(initParam)
cipher.init(Cipher.DECRYPT_MODE, key, ivParameterSpec)
return String(cipher.doFinal(data), CHARSET_UTF8)
} catch (e: UnsupportedEncodingException) {
e.printStackTrace()
} catch (e: NoSuchAlgorithmException) {
e.printStackTrace()
} catch (e: NoSuchPaddingException) {
e.printStackTrace()
} catch (e: InvalidKeyException) {
e.printStackTrace()
} catch (e: InvalidAlgorithmParameterException) {
e.printStackTrace()
} catch (e: IllegalBlockSizeException) {
e.printStackTrace()
} catch (e: BadPaddingException) {
e.printStackTrace()
}
return null
}
@RequiresApi(Build.VERSION_CODES.KITKAT)
@Throws(UnsupportedEncodingException::class)
fun getAESKey(key: String): ByteArray {
val keyBytes: ByteArray = key.toByteArray(CHARSET_UTF8)
val keyBytes16 = ByteArray(SECURE_KEY_LENGTH)
System.arraycopy(
keyBytes, 0, keyBytes16, 0,
keyBytes.size.coerceAtMost(SECURE_KEY_LENGTH)
)
return keyBytes16
}
}



