Xwite 3 лет назад
Родитель
Сommit
56300a0531

+ 11 - 4
app/src/main/assets/help/jsHelp.md

@@ -205,10 +205,14 @@ cipher.encryptBase64(data)
 cipher.encryptHex(data)
 ```
 * 非对称加密
-> 输入参数密钥 支持ByteArray|**Utf8String**
+> 输入参数 key支持ByteArray|**Utf8String**
 ```
 //创建cipher
-java.createAsymmetricCrypto(transformation, privateKey, publicKey)
+java.createAsymmetricCrypto(transformation)
+//设置密钥
+.setPublicKey(key)
+.setPrivateKey(key)
+
 ```
 > 解密加密参数 data支持ByteArray|Base64String|HexString|InputStream  
 >  keyType: 1 使用公钥 2 使用私钥
@@ -222,10 +226,13 @@ cipher.encryptBase64(data, keyType)
 cipher.encryptHex(data, keyType)
 ```
 * 签名
-> 输入参数密钥 支持ByteArray|**Utf8String**
+> 输入参数 key 支持ByteArray|**Utf8String**
 ```
 //创建Sign
-java.createSign(algorithm, privateKey, publicKey)
+java.createSign(algorithm)
+//设置密钥
+.setPublicKey(key)
+.setPrivateKey(key)
 ```
 > 签名参数 data支持ByteArray|inputStream|String
 ```

+ 6 - 33
app/src/main/java/io/legado/app/help/JsEncodeUtils.kt

@@ -3,10 +3,10 @@ package io.legado.app.help
 import android.util.Base64
 import cn.hutool.crypto.digest.DigestUtil
 import cn.hutool.crypto.digest.HMac
-import cn.hutool.crypto.asymmetric.AsymmetricCrypto
-import cn.hutool.crypto.asymmetric.Sign
+import cn.hutool.crypto.asymmetric.*
 import cn.hutool.crypto.symmetric.SymmetricCrypto
 import io.legado.app.utils.MD5Utils
+import io.legado.app.utils.*
 
 /**
  * js加解密扩展类, 在js中通过java变量调用
@@ -72,43 +72,16 @@ interface JsEncodeUtils {
 
     /* keys都为null时使用随机密钥 */
     fun createAsymmetricCrypto(
-        transformation: String,
-        privateKey: ByteArray?,
-        publicKey: ByteArray?
+        transformation: String
     ): AsymmetricCrypto {
-        return AsymmetricCrypto(transformation, privateKey, publicKey)
+        return AsymmetricCrypto(transformation)
     }
 
-    fun createAsymmetricCrypto(
-        transformation: String,
-        privateKey: String?,
-        publicKey: String?
-    ): AsymmetricCrypto {
-        return createAsymmetricCrypto(
-            transformation,
-            privateKey?.encodeToByteArray(),
-            publicKey?.encodeToByteArray()
-        )
-    }
     //******************签名************************//
     fun createSign(
-        algorithm: String,
-        privateKey: String?,
-        publicKey: String?
-    ): Sign {
-        return createSign(
-            algorithm,
-            privateKey?.encodeToByteArray(),
-            publicKey?.encodeToByteArray()
-        )
-    }
-
-    fun createSign(
-        algorithm: String,
-        privateKey: ByteArray?,
-        publicKey: ByteArray?
+        algorithm: String
     ): Sign {
-        return Sign(algorithm, privateKey, publicKey)
+        return Sign(algorithm)
     }
     //******************对称加密解密old************************//
 

+ 71 - 0
app/src/main/java/io/legado/app/utils/AsymmetricCryptoExtension.kt

@@ -0,0 +1,71 @@
+package io.legado.app.utils
+
+import cn.hutool.crypto.asymmetric.*
+import cn.hutool.crypto.KeyUtil
+import java.io.InputStream
+
+fun AsymmetricCrypto.decrypt(data: Any, keyType: Int): ByteArray? {
+    return when {
+        data is ByteArray -> decrypt(data, KeyType(keyType))
+        data is String -> decrypt(data, KeyType(keyType))
+        data is InputStream -> decrypt(data, KeyType(keyType))
+        else -> null
+    }
+}
+
+fun AsymmetricCrypto.decryptStr(data: Any, keyType: Int): String? {
+    return when {
+        data is ByteArray -> decryptStr(data, KeyType(keyType))
+        data is String -> decryptStr(data, KeyType(keyType))
+        data is InputStream -> decryptStr(data, KeyType(keyType))
+        else -> null
+    }
+}
+
+fun AsymmetricCrypto.encrypt(data: Any, keyType: Int): ByteArray? {
+    return when {
+        data is ByteArray -> encrypt(data, KeyType(keyType))
+        data is String -> encrypt(data, KeyType(keyType))
+        data is InputStream -> encrypt(data, KeyType(keyType))
+        else -> null
+    }
+}
+fun AsymmetricCrypto.encryptBase64(data: Any, keyType: Int): String? {
+    return when {
+        data is ByteArray -> encryptBase64(data, KeyType(keyType))
+        data is String -> encryptBase64(data, KeyType(keyType))
+        data is InputStream -> encryptBase64(data, KeyType(keyType))
+        else -> null
+    }
+}
+fun AsymmetricCrypto.encryptHex(data: Any, keyType: Int): String? {
+    return when {
+        data is ByteArray -> encryptHex(data, KeyType(keyType))
+        data is String -> encryptHex(data, KeyType(keyType))
+        data is InputStream -> encryptHex(data, KeyType(keyType))
+        else -> null
+    }
+}
+
+fun AsymmetricCrypto.setPrivateKey(privateKey: ByteArray): AsymmetricCrypto {
+    return setPrivateKey(KeyUtil.generatePrivateKey(this.algorithm, privateKey))
+}
+fun AsymmetricCrypto.setPrivateKey(privateKey: String): AsymmetricCrypto = setPrivateKey(privateKey.encodeToByteArray())
+
+fun AsymmetricCrypto.setPublicKey(publicKey: ByteArray): AsymmetricCrypto {
+    return setPublicKey(KeyUtil.generatePublicKey(this.algorithm, publicKey))
+}
+fun AsymmetricCrypto.setPublicKey(publicKey: ByteArray): AsymmetricCrypto = setPublicKey(publicKey.encodeToByteArray())
+
+fun Sign.setPrivateKey(privateKey: ByteArray): Sign {
+    return setPrivateKey(KeyUtil.generatePrivateKey(this.algorithm, privateKey))
+}
+
+fun Sign.setPrivateKey(privateKey: ByteArray): Sign = setPrivateKey(privateKey.encodeToByteArray())
+
+fun Sign.setPublicKey(publicKey: ByteArray): Sign {
+    return setPublicKey(KeyUtil.generatePublicKey(this.algorithm, publicKey))
+}
+
+fun Sign.setPublicKey(publicKey: ByteArray): Sign = setPublicKey(publicKey.encodeToByteArray())
+