|
|
@@ -4,8 +4,6 @@ import android.net.Uri
|
|
|
import android.util.Base64
|
|
|
import androidx.annotation.Keep
|
|
|
import cn.hutool.crypto.digest.DigestUtil
|
|
|
-import cn.hutool.crypto.symmetric.AES
|
|
|
-import cn.hutool.crypto.symmetric.DESede
|
|
|
import io.legado.app.constant.AppConst
|
|
|
import io.legado.app.constant.AppConst.dateFormat
|
|
|
import io.legado.app.constant.AppLog
|
|
|
@@ -299,14 +297,6 @@ interface JsExtensions {
|
|
|
return EncoderUtils.base64Encode(str, flags)
|
|
|
}
|
|
|
|
|
|
- fun md5Encode(str: String): String {
|
|
|
- return MD5Utils.md5Encode(str)
|
|
|
- }
|
|
|
-
|
|
|
- fun md5Encode16(str: String): String {
|
|
|
- return MD5Utils.md5Encode16(str)
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 格式化时间
|
|
|
*/
|
|
|
@@ -602,6 +592,13 @@ interface JsExtensions {
|
|
|
return UUID.randomUUID().toString()
|
|
|
}
|
|
|
|
|
|
+ fun androidId(): String {
|
|
|
+ return AppConst.androidId
|
|
|
+ }
|
|
|
+
|
|
|
+//******************对称加密解密************************//
|
|
|
+
|
|
|
+ /////AES
|
|
|
/**
|
|
|
* AES 解码为 ByteArray
|
|
|
* @param str 传入的AES加密的数据
|
|
|
@@ -640,6 +637,31 @@ interface JsExtensions {
|
|
|
return aesDecodeToByteArray(str, key, transformation, iv)?.let { String(it) }
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * AES解码为String,算法参数经过Base64加密
|
|
|
+ *
|
|
|
+ * @param data 加密的字符串
|
|
|
+ * @param key Base64后的密钥
|
|
|
+ * @param mode 模式
|
|
|
+ * @param padding 补码方式
|
|
|
+ * @param iv Base64后的加盐
|
|
|
+ * @return 解密后的字符串
|
|
|
+ */
|
|
|
+ fun aesDecodeArgsBase64Str(
|
|
|
+ data: String,
|
|
|
+ key: String,
|
|
|
+ mode: String,
|
|
|
+ padding: String,
|
|
|
+ iv: String
|
|
|
+ ): String? {
|
|
|
+ return EncoderUtils.decryptAES(
|
|
|
+ data.encodeToByteArray(),
|
|
|
+ Base64.decode(key, Base64.NO_WRAP),
|
|
|
+ "AES/${mode}/${padding}",
|
|
|
+ Base64.decode(iv, Base64.NO_WRAP)
|
|
|
+ )?.let { String(it) }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 已经base64的AES 解码为 ByteArray
|
|
|
* @param str 传入的AES Base64加密的数据
|
|
|
@@ -753,35 +775,78 @@ interface JsExtensions {
|
|
|
return aesEncodeToBase64ByteArray(data, key, transformation, iv)?.let { String(it) }
|
|
|
}
|
|
|
|
|
|
- fun androidId(): String {
|
|
|
- return AppConst.androidId
|
|
|
- }
|
|
|
|
|
|
/**
|
|
|
- * AES解密,算法参数经过Base64加密
|
|
|
+ * AES加密并转为Base64,算法参数经过Base64加密
|
|
|
*
|
|
|
- * @param data 加密的字符串
|
|
|
+ * @param data 被加密的字符串
|
|
|
* @param key Base64后的密钥
|
|
|
* @param mode 模式
|
|
|
* @param padding 补码方式
|
|
|
* @param iv Base64后的加盐
|
|
|
- * @return 解密后的字符串
|
|
|
+ * @return 加密后的Base64
|
|
|
*/
|
|
|
- fun aesDecodeArgsBase64Str(
|
|
|
+ fun aesEncodeArgsBase64Str(
|
|
|
data: String,
|
|
|
key: String,
|
|
|
mode: String,
|
|
|
padding: String,
|
|
|
iv: String
|
|
|
): String? {
|
|
|
- return AES(
|
|
|
- mode,
|
|
|
- padding,
|
|
|
+ return EncoderUtils.encryptAES2Base64(
|
|
|
+ data.encodeToByteArray(),
|
|
|
Base64.decode(key, Base64.NO_WRAP),
|
|
|
+ "AES/${mode}/${padding}",
|
|
|
Base64.decode(iv, Base64.NO_WRAP)
|
|
|
- ).decryptStr(data)
|
|
|
+ )?.let { String(it) }
|
|
|
}
|
|
|
|
|
|
+ /////DES
|
|
|
+ fun desDecodeToString(
|
|
|
+ data: String, key: String, transformation: String, iv: String
|
|
|
+ ): String? {
|
|
|
+ return EncoderUtils.decryptDES(
|
|
|
+ data.encodeToByteArray(),
|
|
|
+ key.encodeToByteArray(),
|
|
|
+ transformation,
|
|
|
+ iv.encodeToByteArray()
|
|
|
+ )?.let { String(it) }
|
|
|
+ }
|
|
|
+
|
|
|
+ fun desBase64DecodeToString(
|
|
|
+ data: String, key: String, transformation: String, iv: String
|
|
|
+ ): String? {
|
|
|
+ return EncoderUtils.decryptBase64DES(
|
|
|
+ data.encodeToByteArray(),
|
|
|
+ key.encodeToByteArray(),
|
|
|
+ transformation,
|
|
|
+ iv.encodeToByteArray()
|
|
|
+ )?.let { String(it) }
|
|
|
+ }
|
|
|
+
|
|
|
+ fun desEncodeToString(
|
|
|
+ data: String, key: String, transformation: String, iv: String
|
|
|
+ ): String? {
|
|
|
+ return EncoderUtils.encryptDES(
|
|
|
+ data.encodeToByteArray(),
|
|
|
+ key.encodeToByteArray(),
|
|
|
+ transformation,
|
|
|
+ iv.encodeToByteArray()
|
|
|
+ )?.let { String(it) }
|
|
|
+ }
|
|
|
+
|
|
|
+ fun desEncodeToBase64String(
|
|
|
+ data: String, key: String, transformation: String, iv: String
|
|
|
+ ): String? {
|
|
|
+ return EncoderUtils.encryptDES2Base64(
|
|
|
+ data.encodeToByteArray(),
|
|
|
+ key.encodeToByteArray(),
|
|
|
+ transformation,
|
|
|
+ iv.encodeToByteArray()
|
|
|
+ )?.let { String(it) }
|
|
|
+ }
|
|
|
+
|
|
|
+ //////3DES
|
|
|
/**
|
|
|
* 3DES解密
|
|
|
*
|
|
|
@@ -799,7 +864,12 @@ interface JsExtensions {
|
|
|
padding: String,
|
|
|
iv: String
|
|
|
): String? {
|
|
|
- return DESede(mode, padding, key.toByteArray(), iv.toByteArray()).decryptStr(data)
|
|
|
+ return EncoderUtils.decryptDESede(
|
|
|
+ data.encodeToByteArray(),
|
|
|
+ key.encodeToByteArray(),
|
|
|
+ "DESede/${mode}/${padding}",
|
|
|
+ iv.encodeToByteArray()
|
|
|
+ )?.let { String(it) }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -819,38 +889,14 @@ interface JsExtensions {
|
|
|
padding: String,
|
|
|
iv: String
|
|
|
): String? {
|
|
|
- return DESede(
|
|
|
- mode,
|
|
|
- padding,
|
|
|
+ return EncoderUtils.decryptDESede(
|
|
|
+ data.encodeToByteArray(),
|
|
|
Base64.decode(key, Base64.NO_WRAP),
|
|
|
+ "DESede/${mode}/${padding}",
|
|
|
Base64.decode(iv, Base64.NO_WRAP)
|
|
|
- ).decryptStr(data)
|
|
|
+ )?.let { String(it) }
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * AES加密并转为Base64,算法参数经过Base64加密
|
|
|
- *
|
|
|
- * @param data 被加密的字符串
|
|
|
- * @param key Base64后的密钥
|
|
|
- * @param mode 模式
|
|
|
- * @param padding 补码方式
|
|
|
- * @param iv Base64后的加盐
|
|
|
- * @return 加密后的Base64
|
|
|
- */
|
|
|
- fun aesEncodeArgsBase64Str(
|
|
|
- data: String,
|
|
|
- key: String,
|
|
|
- mode: String,
|
|
|
- padding: String,
|
|
|
- iv: String
|
|
|
- ): String? {
|
|
|
- return AES(
|
|
|
- mode,
|
|
|
- padding,
|
|
|
- Base64.decode(key, Base64.NO_WRAP),
|
|
|
- Base64.decode(iv, Base64.NO_WRAP)
|
|
|
- ).encryptBase64(data)
|
|
|
- }
|
|
|
|
|
|
/**
|
|
|
* 3DES加密并转为Base64
|
|
|
@@ -869,7 +915,12 @@ interface JsExtensions {
|
|
|
padding: String,
|
|
|
iv: String
|
|
|
): String? {
|
|
|
- return DESede(mode, padding, key.toByteArray(), iv.toByteArray()).encryptBase64(data)
|
|
|
+ return EncoderUtils.encryptDESede2Base64(
|
|
|
+ data.encodeToByteArray(),
|
|
|
+ key.encodeToByteArray(),
|
|
|
+ "DESede/${mode}/${padding}",
|
|
|
+ iv.encodeToByteArray()
|
|
|
+ )?.let { String(it) }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -889,14 +940,16 @@ interface JsExtensions {
|
|
|
padding: String,
|
|
|
iv: String
|
|
|
): String? {
|
|
|
- return DESede(
|
|
|
- mode,
|
|
|
- padding,
|
|
|
+ return EncoderUtils.encryptDESede2Base64(
|
|
|
+ data.encodeToByteArray(),
|
|
|
Base64.decode(key, Base64.NO_WRAP),
|
|
|
+ "DESede/${mode}/${padding}",
|
|
|
Base64.decode(iv, Base64.NO_WRAP)
|
|
|
- ).encryptBase64(data)
|
|
|
+ )?.let { String(it) }
|
|
|
}
|
|
|
|
|
|
+//******************消息摘要************************//
|
|
|
+
|
|
|
/**
|
|
|
* 生成摘要,并转为16进制字符串
|
|
|
*
|
|
|
@@ -925,4 +978,12 @@ interface JsExtensions {
|
|
|
return Base64.encodeToString(DigestUtil.digester(algorithm).digest(data), Base64.NO_WRAP)
|
|
|
}
|
|
|
|
|
|
+ fun md5Encode(str: String): String {
|
|
|
+ return MD5Utils.md5Encode(str)
|
|
|
+ }
|
|
|
+
|
|
|
+ fun md5Encode16(str: String): String {
|
|
|
+ return MD5Utils.md5Encode16(str)
|
|
|
+ }
|
|
|
+
|
|
|
}
|