This commit is contained in:
Xwite
2023-03-14 22:26:34 +08:00
parent 19b796b9c4
commit 883ef24f7b
3 changed files with 88 additions and 37 deletions

View File

@@ -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
```

View File

@@ -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?
algorithm: String
): Sign {
return createSign(
algorithm,
privateKey?.encodeToByteArray(),
publicKey?.encodeToByteArray()
)
}
fun createSign(
algorithm: String,
privateKey: ByteArray?,
publicKey: ByteArray?
): Sign {
return Sign(algorithm, privateKey, publicKey)
return Sign(algorithm)
}
//******************对称加密解密old************************//

View File

@@ -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())