|
|
|
@ -38,6 +38,7 @@ object EncoderUtils { |
|
|
|
|
fun base64Encode(str: String, flags: Int = Base64.NO_WRAP): String? { |
|
|
|
|
return Base64.encodeToString(str.toByteArray(), flags) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//////////AES Start |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -45,16 +46,18 @@ object EncoderUtils { |
|
|
|
|
* |
|
|
|
|
* @param data The data. |
|
|
|
|
* @param key The key. |
|
|
|
|
* @param transformation The name of the transformation, e.g., *DES/CBC/PKCS5Padding*. |
|
|
|
|
* @param transformation The name of the transformation, |
|
|
|
|
* 加密算法/加密模式/填充类型, *DES/CBC/PKCS5Padding*. |
|
|
|
|
* @param iv The buffer with the IV. The contents of the |
|
|
|
|
* buffer are copied to protect against subsequent modification. |
|
|
|
|
* @return the Base64-encode bytes of AES encryption |
|
|
|
|
*/ |
|
|
|
|
@Throws(Exception::class) |
|
|
|
|
fun encryptAES2Base64( |
|
|
|
|
data: ByteArray?, |
|
|
|
|
key: ByteArray?, |
|
|
|
|
transformation: String?, |
|
|
|
|
iv: ByteArray? |
|
|
|
|
transformation: String? = "DES/ECB/PKCS5Padding", |
|
|
|
|
iv: ByteArray? = null |
|
|
|
|
): ByteArray? { |
|
|
|
|
return Base64.encode(encryptAES(data, key, transformation, iv), Base64.NO_WRAP) |
|
|
|
|
} |
|
|
|
@ -64,16 +67,18 @@ object EncoderUtils { |
|
|
|
|
* |
|
|
|
|
* @param data The data. |
|
|
|
|
* @param key The key. |
|
|
|
|
* @param transformation The name of the transformation, e.g., *DES/CBC/PKCS5Padding*. |
|
|
|
|
* @param transformation The name of the transformation, |
|
|
|
|
* 加密算法/加密模式/填充类型, *DES/CBC/PKCS5Padding*. |
|
|
|
|
* @param iv The buffer with the IV. The contents of the |
|
|
|
|
* buffer are copied to protect against subsequent modification. |
|
|
|
|
* @return the bytes of AES encryption |
|
|
|
|
*/ |
|
|
|
|
@Throws(Exception::class) |
|
|
|
|
fun encryptAES( |
|
|
|
|
data: ByteArray?, |
|
|
|
|
key: ByteArray?, |
|
|
|
|
transformation: String?, |
|
|
|
|
iv: ByteArray? |
|
|
|
|
transformation: String? = "DES/ECB/PKCS5Padding", |
|
|
|
|
iv: ByteArray? = null |
|
|
|
|
): ByteArray? { |
|
|
|
|
return symmetricTemplate(data, key, "AES", transformation!!, iv, true) |
|
|
|
|
} |
|
|
|
@ -84,15 +89,17 @@ object EncoderUtils { |
|
|
|
|
* |
|
|
|
|
* @param data The data. |
|
|
|
|
* @param key The key. |
|
|
|
|
* @param transformation The name of the transformation, e.g., *DES/CBC/PKCS5Padding*. |
|
|
|
|
* @param transformation The name of the transformation, |
|
|
|
|
* 加密算法/加密模式/填充类型, *DES/CBC/PKCS5Padding*. |
|
|
|
|
* @param iv The buffer with the IV. The contents of the |
|
|
|
|
* buffer are copied to protect against subsequent modification. |
|
|
|
|
* @return the bytes of AES decryption for Base64-encode bytes |
|
|
|
|
*/ |
|
|
|
|
@Throws(Exception::class) |
|
|
|
|
fun decryptBase64AES( |
|
|
|
|
data: ByteArray?, |
|
|
|
|
key: ByteArray?, |
|
|
|
|
transformation: String = "DES/CBC/PKCS5Padding", |
|
|
|
|
transformation: String = "DES/ECB/PKCS5Padding", |
|
|
|
|
iv: ByteArray? = null |
|
|
|
|
): ByteArray? { |
|
|
|
|
return decryptAES(Base64.decode(data, Base64.NO_WRAP), key, transformation, iv) |
|
|
|
@ -103,15 +110,17 @@ object EncoderUtils { |
|
|
|
|
* |
|
|
|
|
* @param data The data. |
|
|
|
|
* @param key The key. |
|
|
|
|
* @param transformation The name of the transformation, e.g., *DES/CBC/PKCS5Padding*. |
|
|
|
|
* @param transformation The name of the transformation, |
|
|
|
|
* 加密算法/加密模式/填充类型, *DES/CBC/PKCS5Padding*. |
|
|
|
|
* @param iv The buffer with the IV. The contents of the |
|
|
|
|
* buffer are copied to protect against subsequent modification. |
|
|
|
|
* @return the bytes of AES decryption |
|
|
|
|
*/ |
|
|
|
|
@Throws(Exception::class) |
|
|
|
|
fun decryptAES( |
|
|
|
|
data: ByteArray?, |
|
|
|
|
key: ByteArray?, |
|
|
|
|
transformation: String = "DES/CBC/PKCS5Padding", |
|
|
|
|
transformation: String = "AES/ECB/PKCS5Padding", |
|
|
|
|
iv: ByteArray? = null |
|
|
|
|
): ByteArray? { |
|
|
|
|
return symmetricTemplate(data, key, "AES", transformation, iv, false) |
|
|
|
@ -124,13 +133,15 @@ object EncoderUtils { |
|
|
|
|
* @param data The data. |
|
|
|
|
* @param key The key. |
|
|
|
|
* @param algorithm The name of algorithm. |
|
|
|
|
* @param transformation The name of the transformation, e.g., <i>DES/CBC/PKCS5Padding</i>. |
|
|
|
|
* @param transformation The name of the transformation, |
|
|
|
|
* 加密算法/加密模式/填充类型, <i>DES/CBC/PKCS5Padding</i>. |
|
|
|
|
* @param iv The buffer with the IV. The contents of the |
|
|
|
|
* buffer are copied to protect against subsequent modification. |
|
|
|
|
* @param isEncrypt True to encrypt, false otherwise. |
|
|
|
|
* @return the bytes of symmetric encryption or decryption |
|
|
|
|
*/ |
|
|
|
|
@Suppress("SameParameterValue") |
|
|
|
|
@Throws(Exception::class) |
|
|
|
|
private fun symmetricTemplate( |
|
|
|
|
data: ByteArray?, |
|
|
|
|
key: ByteArray?, |
|
|
|
@ -140,7 +151,7 @@ object EncoderUtils { |
|
|
|
|
isEncrypt: Boolean |
|
|
|
|
): ByteArray? { |
|
|
|
|
return if (data == null || data.isEmpty() || key == null || key.isEmpty()) null |
|
|
|
|
else try { |
|
|
|
|
else { |
|
|
|
|
val keySpec = SecretKeySpec(key, algorithm) |
|
|
|
|
val cipher = Cipher.getInstance(transformation) |
|
|
|
|
if (iv == null || iv.isEmpty()) { |
|
|
|
@ -154,9 +165,6 @@ object EncoderUtils { |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
cipher.doFinal(data) |
|
|
|
|
} catch (e: Throwable) { |
|
|
|
|
e.printStackTrace() |
|
|
|
|
null |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|