Kaynağa Gözat

fix: expose JS crypto utilities to WebView

HapeLee 3 ay önce
ebeveyn
işleme
4f7dc0ab6f

+ 32 - 1
app/src/main/java/io/legado/app/help/JsEncodeUtils.kt

@@ -1,6 +1,7 @@
 package io.legado.app.help
 
 import android.util.Base64
+import android.webkit.JavascriptInterface
 import cn.hutool.crypto.digest.DigestUtil
 import cn.hutool.crypto.digest.HMac
 import cn.hutool.crypto.symmetric.SymmetricCrypto
@@ -17,10 +18,12 @@ import io.legado.app.utils.MD5Utils
 @Suppress("unused")
 interface JsEncodeUtils {
 
+    @JavascriptInterface
     fun md5Encode(str: String): String {
         return MD5Utils.md5Encode(str)
     }
 
+    @JavascriptInterface
     fun md5Encode16(str: String): String {
         return MD5Utils.md5Encode16(str)
     }
@@ -39,6 +42,7 @@ interface JsEncodeUtils {
      */
 
     /* 调用SymmetricCrypto key为null时使用随机密钥*/
+    @JavascriptInterface
     fun createSymmetricCrypto(
         transformation: String,
         key: ByteArray?,
@@ -48,6 +52,7 @@ interface JsEncodeUtils {
         return if (iv != null && iv.isNotEmpty()) symmetricCrypto.setIv(iv) else symmetricCrypto
     }
 
+    @JavascriptInterface
     fun createSymmetricCrypto(
         transformation: String,
         key: ByteArray
@@ -55,6 +60,7 @@ interface JsEncodeUtils {
         return createSymmetricCrypto(transformation, key, null)
     }
 
+    @JavascriptInterface
     fun createSymmetricCrypto(
         transformation: String,
         key: String
@@ -62,6 +68,7 @@ interface JsEncodeUtils {
         return createSymmetricCrypto(transformation, key, null)
     }
 
+    @JavascriptInterface
     fun createSymmetricCrypto(
         transformation: String,
         key: String,
@@ -74,6 +81,7 @@ interface JsEncodeUtils {
     //******************非对称加密解密************************//
 
     /* keys都为null时使用随机密钥 */
+    @JavascriptInterface
     fun createAsymmetricCrypto(
         transformation: String
     ): AsymmetricCrypto {
@@ -81,6 +89,7 @@ interface JsEncodeUtils {
     }
 
     //******************签名************************//
+    @JavascriptInterface
     fun createSign(
         algorithm: String
     ): Sign {
@@ -100,6 +109,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).decrypt(str)")
     )
+    @JavascriptInterface
     fun aesDecodeToByteArray(
         str: String, key: String, transformation: String, iv: String
     ): ByteArray? {
@@ -117,6 +127,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(str)")
     )
+    @JavascriptInterface
     fun aesDecodeToString(
         str: String, key: String, transformation: String, iv: String
     ): String? {
@@ -137,6 +148,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(data)")
     )
+    @JavascriptInterface
     fun aesDecodeArgsBase64Str(
         data: String,
         key: String,
@@ -162,6 +174,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).decrypt(str)")
     )
+    @JavascriptInterface
     fun aesBase64DecodeToByteArray(
         str: String, key: String, transformation: String, iv: String
     ): ByteArray? {
@@ -179,6 +192,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(str)")
     )
+    @JavascriptInterface
     fun aesBase64DecodeToString(
         str: String, key: String, transformation: String, iv: String
     ): String? {
@@ -196,6 +210,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).decrypt(data)")
     )
+    @JavascriptInterface
     fun aesEncodeToByteArray(
         data: String, key: String, transformation: String, iv: String
     ): ByteArray? {
@@ -213,6 +228,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(data)")
     )
+    @JavascriptInterface
     fun aesEncodeToString(
         data: String, key: String, transformation: String, iv: String
     ): String? {
@@ -230,6 +246,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).encryptBase64(data).toByteArray()")
     )
+    @JavascriptInterface
     fun aesEncodeToBase64ByteArray(
         data: String, key: String, transformation: String, iv: String
     ): ByteArray? {
@@ -247,6 +264,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).encryptBase64(data)")
     )
+    @JavascriptInterface
     fun aesEncodeToBase64String(
         data: String, key: String, transformation: String, iv: String
     ): String? {
@@ -268,6 +286,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).encryptBase64(data)")
     )
+    @JavascriptInterface
     fun aesEncodeArgsBase64Str(
         data: String,
         key: String,
@@ -283,6 +302,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(data)")
     )
+    @JavascriptInterface
     fun desDecodeToString(
         data: String, key: String, transformation: String, iv: String
     ): String? {
@@ -293,6 +313,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(data)")
     )
+    @JavascriptInterface
     fun desBase64DecodeToString(
         data: String, key: String, transformation: String, iv: String
     ): String? {
@@ -303,6 +324,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).encrypt(data)")
     )
+    @JavascriptInterface
     fun desEncodeToString(
         data: String, key: String, transformation: String, iv: String
     ): String? {
@@ -313,6 +335,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).encryptBase64(data)")
     )
+    @JavascriptInterface
     fun desEncodeToBase64String(
         data: String, key: String, transformation: String, iv: String
     ): String? {
@@ -334,6 +357,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(data)")
     )
+    @JavascriptInterface
     fun tripleDESDecodeStr(
         data: String,
         key: String,
@@ -358,6 +382,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(data)")
     )
+    @JavascriptInterface
     fun tripleDESDecodeArgsBase64Str(
         data: String,
         key: String,
@@ -387,6 +412,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).encryptBase64(data)")
     )
+    @JavascriptInterface
     fun tripleDESEncodeBase64Str(
         data: String,
         key: String,
@@ -412,6 +438,7 @@ interface JsEncodeUtils {
         "过于繁琐弃用",
         ReplaceWith("createSymmetricCrypto(transformation, key, iv).encryptBase64(data)")
     )
+    @JavascriptInterface
     fun tripleDESEncodeArgsBase64Str(
         data: String,
         key: String,
@@ -435,6 +462,7 @@ interface JsEncodeUtils {
      * @param algorithm 签名算法
      * @return 16进制字符串
      */
+    @JavascriptInterface
     fun digestHex(
         data: String,
         algorithm: String,
@@ -449,6 +477,7 @@ interface JsEncodeUtils {
      * @param algorithm 签名算法
      * @return Base64字符串
      */
+    @JavascriptInterface
     fun digestBase64Str(
         data: String,
         algorithm: String,
@@ -465,6 +494,7 @@ interface JsEncodeUtils {
      * @return 16进制字符串
      */
     @Suppress("FunctionName")
+    @JavascriptInterface
     fun HMacHex(
         data: String,
         algorithm: String,
@@ -482,6 +512,7 @@ interface JsEncodeUtils {
      * @return Base64字符串
      */
     @Suppress("FunctionName")
+    @JavascriptInterface
     fun HMacBase64(
         data: String,
         algorithm: String,
@@ -494,4 +525,4 @@ interface JsEncodeUtils {
     }
 
 
-}
+}