From f5540b35a63eec3461db5c8b3ea7bee8f30dea15 Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Mon, 26 Feb 2024 09:43:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/data/entities/BaseSource.kt | 4 ++- .../java/io/legado/app/help/JsEncodeUtils.kt | 2 +- .../legado/app/help/SymmetricCryptoAndroid.kt | 33 +++++++++++++++++++ .../java/io/legado/app/utils/EncoderUtils.kt | 5 +++ 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/io/legado/app/help/SymmetricCryptoAndroid.kt diff --git a/app/src/main/java/io/legado/app/data/entities/BaseSource.kt b/app/src/main/java/io/legado/app/data/entities/BaseSource.kt index 0a4461d63..99ab1b9c5 100644 --- a/app/src/main/java/io/legado/app/data/entities/BaseSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/BaseSource.kt @@ -8,6 +8,7 @@ import io.legado.app.constant.AppLog import io.legado.app.data.entities.rule.RowUi import io.legado.app.help.CacheManager import io.legado.app.help.JsExtensions +import io.legado.app.help.SymmetricCryptoAndroid import io.legado.app.help.config.AppConfig import io.legado.app.help.http.CookieStore import io.legado.app.model.SharedJsScope @@ -106,6 +107,7 @@ interface BaseSource : JsExtensions { it.lastIndexOf("<") ) ).toString() + else -> it } ).getOrNull()?.let { map -> @@ -176,7 +178,7 @@ interface BaseSource : JsExtensions { fun putLoginInfo(info: String): Boolean { return try { val key = (AppConst.androidId).encodeToByteArray(0, 16) - val encodeStr = AES(key).encryptBase64(info) + val encodeStr = SymmetricCryptoAndroid("AES", key).encryptBase64(info) CacheManager.put("userInfo_${getKey()}", encodeStr) true } catch (e: Exception) { diff --git a/app/src/main/java/io/legado/app/help/JsEncodeUtils.kt b/app/src/main/java/io/legado/app/help/JsEncodeUtils.kt index a98b6441f..3f3e0e3f8 100644 --- a/app/src/main/java/io/legado/app/help/JsEncodeUtils.kt +++ b/app/src/main/java/io/legado/app/help/JsEncodeUtils.kt @@ -42,7 +42,7 @@ interface JsEncodeUtils { key: ByteArray?, iv: ByteArray? ): SymmetricCrypto { - val symmetricCrypto = SymmetricCrypto(transformation, key) + val symmetricCrypto = SymmetricCryptoAndroid(transformation, key) return if (iv != null && iv.isNotEmpty()) symmetricCrypto.setIv(iv) else symmetricCrypto } diff --git a/app/src/main/java/io/legado/app/help/SymmetricCryptoAndroid.kt b/app/src/main/java/io/legado/app/help/SymmetricCryptoAndroid.kt new file mode 100644 index 000000000..201219930 --- /dev/null +++ b/app/src/main/java/io/legado/app/help/SymmetricCryptoAndroid.kt @@ -0,0 +1,33 @@ +package io.legado.app.help + +import cn.hutool.crypto.symmetric.SymmetricCrypto +import io.legado.app.utils.EncoderUtils +import java.io.InputStream +import java.nio.charset.Charset + +class SymmetricCryptoAndroid( + algorithm: String, + key: ByteArray?, +) : SymmetricCrypto(algorithm, key) { + + override fun encryptBase64(data: ByteArray): String { + return EncoderUtils.base64Encode(encrypt(data)) + } + + override fun encryptBase64(data: String, charset: String?): String { + return EncoderUtils.base64Encode(encrypt(data, charset)) + } + + override fun encryptBase64(data: String, charset: Charset?): String { + return EncoderUtils.base64Encode(encrypt(data, charset)) + } + + override fun encryptBase64(data: String): String { + return EncoderUtils.base64Encode(encrypt(data)) + } + + override fun encryptBase64(data: InputStream): String { + return EncoderUtils.base64Encode(encrypt(data)) + } + +} diff --git a/app/src/main/java/io/legado/app/utils/EncoderUtils.kt b/app/src/main/java/io/legado/app/utils/EncoderUtils.kt index 54c528f03..97f4d1dca 100644 --- a/app/src/main/java/io/legado/app/utils/EncoderUtils.kt +++ b/app/src/main/java/io/legado/app/utils/EncoderUtils.kt @@ -37,6 +37,11 @@ object EncoderUtils { fun base64Encode(str: String, flags: Int = Base64.NO_WRAP): String? { return Base64.encodeToString(str.toByteArray(), flags) } + + @JvmOverloads + fun base64Encode(bytes: ByteArray, flags: Int = Base64.NO_WRAP): String { + return Base64.encodeToString(bytes, flags) + } @JvmOverloads fun base64DecodeToByteArray(str: String, flags: Int = Base64.DEFAULT): ByteArray {