parent
b388dce8a5
commit
3da6aa8dd3
@ -0,0 +1,496 @@ |
|||||||
|
/* |
||||||
|
* This file is part of FYReader. |
||||||
|
* FYReader is free software: you can redistribute it and/or modify |
||||||
|
* it under the terms of the GNU General Public License as published by |
||||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||||
|
* (at your option) any later version. |
||||||
|
* |
||||||
|
* FYReader is distributed in the hope that it will be useful, |
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
* GNU General Public License for more details. |
||||||
|
* |
||||||
|
* You should have received a copy of the GNU General Public License |
||||||
|
* along with FYReader. If not, see <https://www.gnu.org/licenses/>. |
||||||
|
* |
||||||
|
* Copyright (C) 2020 - 2022 fengyuecanzhu |
||||||
|
*/ |
||||||
|
|
||||||
|
package xyz.fycz.myreader.model.third3.analyzeRule |
||||||
|
|
||||||
|
import android.util.Base64 |
||||||
|
import cn.hutool.crypto.digest.DigestUtil |
||||||
|
import cn.hutool.crypto.digest.HMac |
||||||
|
import cn.hutool.crypto.symmetric.SymmetricCrypto |
||||||
|
import xyz.fycz.myreader.util.utils.MD5Utils |
||||||
|
|
||||||
|
/** |
||||||
|
* js加解密扩展类, 在js中通过java变量调用 |
||||||
|
* 添加方法,请更新文档/legado/app/src/main/assets/help/JsHelp.md |
||||||
|
*/ |
||||||
|
interface JsEncodeUtils { |
||||||
|
|
||||||
|
fun md5Encode(str: String): String { |
||||||
|
return MD5Utils.md5Encode(str) |
||||||
|
} |
||||||
|
|
||||||
|
fun md5Encode16(str: String): String { |
||||||
|
return MD5Utils.md5Encode16(str) |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//******************对称加密解密************************// |
||||||
|
|
||||||
|
/** |
||||||
|
* 在js中这样使用 |
||||||
|
* java.createSymmetricCrypto(transformation, key, iv).decrypt(data) |
||||||
|
* java.createSymmetricCrypto(transformation, key, iv).decryptStr(data) |
||||||
|
|
||||||
|
* java.createSymmetricCrypto(transformation, key, iv).encrypt(data) |
||||||
|
* java.createSymmetricCrypto(transformation, key, iv).encryptBase64(data) |
||||||
|
* java.createSymmetricCrypto(transformation, key, iv).encryptHex(data) |
||||||
|
*/ |
||||||
|
|
||||||
|
/* 调用SymmetricCrypto key为null时使用随机密钥*/ |
||||||
|
fun createSymmetricCrypto( |
||||||
|
transformation: String, |
||||||
|
key: ByteArray?, |
||||||
|
iv: ByteArray? |
||||||
|
): SymmetricCrypto { |
||||||
|
val symmetricCrypto = SymmetricCrypto(transformation, key) |
||||||
|
return if (iv != null && iv.isNotEmpty()) symmetricCrypto.setIv(iv) else symmetricCrypto |
||||||
|
} |
||||||
|
|
||||||
|
fun createSymmetricCrypto( |
||||||
|
transformation: String, |
||||||
|
key: ByteArray |
||||||
|
): SymmetricCrypto { |
||||||
|
return createSymmetricCrypto(transformation, key, null) |
||||||
|
} |
||||||
|
|
||||||
|
fun createSymmetricCrypto( |
||||||
|
transformation: String, |
||||||
|
key: String |
||||||
|
): SymmetricCrypto { |
||||||
|
return createSymmetricCrypto(transformation, key, null) |
||||||
|
} |
||||||
|
|
||||||
|
fun createSymmetricCrypto( |
||||||
|
transformation: String, |
||||||
|
key: String, |
||||||
|
iv: String? |
||||||
|
): SymmetricCrypto { |
||||||
|
return createSymmetricCrypto( |
||||||
|
transformation, key.encodeToByteArray(), iv?.encodeToByteArray() |
||||||
|
) |
||||||
|
} |
||||||
|
|
||||||
|
//******************对称加密解密old************************// |
||||||
|
|
||||||
|
/////AES |
||||||
|
/** |
||||||
|
* AES 解码为 ByteArray |
||||||
|
* @param str 传入的AES加密的数据 |
||||||
|
* @param key AES 解密的key |
||||||
|
* @param transformation AES加密的方式 |
||||||
|
* @param iv ECB模式的偏移向量 |
||||||
|
*/ |
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).decrypt(str)") |
||||||
|
) |
||||||
|
fun aesDecodeToByteArray( |
||||||
|
str: String, key: String, transformation: String, iv: String |
||||||
|
): ByteArray? { |
||||||
|
return createSymmetricCrypto(transformation, key, iv).decrypt(str) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* AES 解码为 String |
||||||
|
* @param str 传入的AES加密的数据 |
||||||
|
* @param key AES 解密的key |
||||||
|
* @param transformation AES加密的方式 |
||||||
|
* @param iv ECB模式的偏移向量 |
||||||
|
*/ |
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(str)") |
||||||
|
) |
||||||
|
fun aesDecodeToString( |
||||||
|
str: String, key: String, transformation: String, iv: String |
||||||
|
): String? { |
||||||
|
return createSymmetricCrypto(transformation, key, iv).decryptStr(str) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* AES解码为String,算法参数经过Base64加密 |
||||||
|
* |
||||||
|
* @param data 加密的字符串 |
||||||
|
* @param key Base64后的密钥 |
||||||
|
* @param mode 模式 |
||||||
|
* @param padding 补码方式 |
||||||
|
* @param iv Base64后的加盐 |
||||||
|
* @return 解密后的字符串 |
||||||
|
*/ |
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(data)") |
||||||
|
) |
||||||
|
fun aesDecodeArgsBase64Str( |
||||||
|
data: String, |
||||||
|
key: String, |
||||||
|
mode: String, |
||||||
|
padding: String, |
||||||
|
iv: String |
||||||
|
): String? { |
||||||
|
return createSymmetricCrypto( |
||||||
|
"AES/${mode}/${padding}", |
||||||
|
Base64.decode(key, Base64.NO_WRAP), |
||||||
|
Base64.decode(iv, Base64.NO_WRAP) |
||||||
|
).decryptStr(data) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 已经base64的AES 解码为 ByteArray |
||||||
|
* @param str 传入的AES Base64加密的数据 |
||||||
|
* @param key AES 解密的key |
||||||
|
* @param transformation AES加密的方式 |
||||||
|
* @param iv ECB模式的偏移向量 |
||||||
|
*/ |
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).decrypt(str)") |
||||||
|
) |
||||||
|
fun aesBase64DecodeToByteArray( |
||||||
|
str: String, key: String, transformation: String, iv: String |
||||||
|
): ByteArray? { |
||||||
|
return createSymmetricCrypto(transformation, key, iv).decrypt(str) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 已经base64的AES 解码为 String |
||||||
|
* @param str 传入的AES Base64加密的数据 |
||||||
|
* @param key AES 解密的key |
||||||
|
* @param transformation AES加密的方式 |
||||||
|
* @param iv ECB模式的偏移向量 |
||||||
|
*/ |
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(str)") |
||||||
|
) |
||||||
|
fun aesBase64DecodeToString( |
||||||
|
str: String, key: String, transformation: String, iv: String |
||||||
|
): String? { |
||||||
|
return createSymmetricCrypto(transformation, key, iv).decryptStr(str) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 加密aes为ByteArray |
||||||
|
* @param data 传入的原始数据 |
||||||
|
* @param key AES加密的key |
||||||
|
* @param transformation AES加密的方式 |
||||||
|
* @param iv ECB模式的偏移向量 |
||||||
|
*/ |
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).decrypt(data)") |
||||||
|
) |
||||||
|
fun aesEncodeToByteArray( |
||||||
|
data: String, key: String, transformation: String, iv: String |
||||||
|
): ByteArray? { |
||||||
|
return createSymmetricCrypto(transformation, key, iv).decrypt(data) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 加密aes为String |
||||||
|
* @param data 传入的原始数据 |
||||||
|
* @param key AES加密的key |
||||||
|
* @param transformation AES加密的方式 |
||||||
|
* @param iv ECB模式的偏移向量 |
||||||
|
*/ |
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(data)") |
||||||
|
) |
||||||
|
fun aesEncodeToString( |
||||||
|
data: String, key: String, transformation: String, iv: String |
||||||
|
): String? { |
||||||
|
return createSymmetricCrypto(transformation, key, iv).decryptStr(data) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 加密aes后Base64化的ByteArray |
||||||
|
* @param data 传入的原始数据 |
||||||
|
* @param key AES加密的key |
||||||
|
* @param transformation AES加密的方式 |
||||||
|
* @param iv ECB模式的偏移向量 |
||||||
|
*/ |
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).encryptBase64(data).toByteArray()") |
||||||
|
) |
||||||
|
fun aesEncodeToBase64ByteArray( |
||||||
|
data: String, key: String, transformation: String, iv: String |
||||||
|
): ByteArray? { |
||||||
|
return createSymmetricCrypto(transformation, key, iv).encryptBase64(data).toByteArray() |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 加密aes后Base64化的String |
||||||
|
* @param data 传入的原始数据 |
||||||
|
* @param key AES加密的key |
||||||
|
* @param transformation AES加密的方式 |
||||||
|
* @param iv ECB模式的偏移向量 |
||||||
|
*/ |
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).encryptBase64(data)") |
||||||
|
) |
||||||
|
fun aesEncodeToBase64String( |
||||||
|
data: String, key: String, transformation: String, iv: String |
||||||
|
): String? { |
||||||
|
return createSymmetricCrypto(transformation, key, iv).encryptBase64(data) |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* AES加密并转为Base64,算法参数经过Base64加密 |
||||||
|
* |
||||||
|
* @param data 被加密的字符串 |
||||||
|
* @param key Base64后的密钥 |
||||||
|
* @param mode 模式 |
||||||
|
* @param padding 补码方式 |
||||||
|
* @param iv Base64后的加盐 |
||||||
|
* @return 加密后的Base64 |
||||||
|
*/ |
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).encryptBase64(data)") |
||||||
|
) |
||||||
|
fun aesEncodeArgsBase64Str( |
||||||
|
data: String, |
||||||
|
key: String, |
||||||
|
mode: String, |
||||||
|
padding: String, |
||||||
|
iv: String |
||||||
|
): String? { |
||||||
|
return createSymmetricCrypto("AES/${mode}/${padding}", key, iv).encryptBase64(data) |
||||||
|
} |
||||||
|
|
||||||
|
/////DES |
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(data)") |
||||||
|
) |
||||||
|
fun desDecodeToString( |
||||||
|
data: String, key: String, transformation: String, iv: String |
||||||
|
): String? { |
||||||
|
return createSymmetricCrypto(transformation, key, iv).decryptStr(data) |
||||||
|
} |
||||||
|
|
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(data)") |
||||||
|
) |
||||||
|
fun desBase64DecodeToString( |
||||||
|
data: String, key: String, transformation: String, iv: String |
||||||
|
): String? { |
||||||
|
return createSymmetricCrypto(transformation, key, iv).decryptStr(data) |
||||||
|
} |
||||||
|
|
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).encrypt(data)") |
||||||
|
) |
||||||
|
fun desEncodeToString( |
||||||
|
data: String, key: String, transformation: String, iv: String |
||||||
|
): String? { |
||||||
|
return String(createSymmetricCrypto(transformation, key, iv).encrypt(data)) |
||||||
|
} |
||||||
|
|
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).encryptBase64(data)") |
||||||
|
) |
||||||
|
fun desEncodeToBase64String( |
||||||
|
data: String, key: String, transformation: String, iv: String |
||||||
|
): String? { |
||||||
|
return createSymmetricCrypto(transformation, key, iv).encryptBase64(data) |
||||||
|
} |
||||||
|
|
||||||
|
//////3DES |
||||||
|
/** |
||||||
|
* 3DES解密 |
||||||
|
* |
||||||
|
* @param data 加密的字符串 |
||||||
|
* @param key 密钥 |
||||||
|
* @param mode 模式 |
||||||
|
* @param padding 补码方式 |
||||||
|
* @param iv 加盐 |
||||||
|
* @return 解密后的字符串 |
||||||
|
*/ |
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(data)") |
||||||
|
) |
||||||
|
fun tripleDESDecodeStr( |
||||||
|
data: String, |
||||||
|
key: String, |
||||||
|
mode: String, |
||||||
|
padding: String, |
||||||
|
iv: String |
||||||
|
): String? { |
||||||
|
return createSymmetricCrypto("DESede/${mode}/${padding}", key, iv).decryptStr(data) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 3DES解密,算法参数经过Base64加密 |
||||||
|
* |
||||||
|
* @param data 加密的字符串 |
||||||
|
* @param key Base64后的密钥 |
||||||
|
* @param mode 模式 |
||||||
|
* @param padding 补码方式 |
||||||
|
* @param iv Base64后的加盐 |
||||||
|
* @return 解密后的字符串 |
||||||
|
*/ |
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).decryptStr(data)") |
||||||
|
) |
||||||
|
fun tripleDESDecodeArgsBase64Str( |
||||||
|
data: String, |
||||||
|
key: String, |
||||||
|
mode: String, |
||||||
|
padding: String, |
||||||
|
iv: String |
||||||
|
): String? { |
||||||
|
return createSymmetricCrypto( |
||||||
|
"DESede/${mode}/${padding}", |
||||||
|
Base64.decode(key, Base64.NO_WRAP), |
||||||
|
iv.encodeToByteArray() |
||||||
|
).decryptStr(data) |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 3DES加密并转为Base64 |
||||||
|
* |
||||||
|
* @param data 被加密的字符串 |
||||||
|
* @param key 密钥 |
||||||
|
* @param mode 模式 |
||||||
|
* @param padding 补码方式 |
||||||
|
* @param iv 加盐 |
||||||
|
* @return 加密后的Base64 |
||||||
|
*/ |
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).encryptBase64(data)") |
||||||
|
) |
||||||
|
fun tripleDESEncodeBase64Str( |
||||||
|
data: String, |
||||||
|
key: String, |
||||||
|
mode: String, |
||||||
|
padding: String, |
||||||
|
iv: String |
||||||
|
): String? { |
||||||
|
return createSymmetricCrypto("DESede/${mode}/${padding}", key, iv) |
||||||
|
.encryptBase64(data) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 3DES加密并转为Base64,算法参数经过Base64加密 |
||||||
|
* |
||||||
|
* @param data 被加密的字符串 |
||||||
|
* @param key Base64后的密钥 |
||||||
|
* @param mode 模式 |
||||||
|
* @param padding 补码方式 |
||||||
|
* @param iv Base64后的加盐 |
||||||
|
* @return 加密后的Base64 |
||||||
|
*/ |
||||||
|
@Deprecated( |
||||||
|
"过于繁琐弃用", |
||||||
|
ReplaceWith("createSymmetricCrypto(transformation, key, iv).encryptBase64(data)") |
||||||
|
) |
||||||
|
fun tripleDESEncodeArgsBase64Str( |
||||||
|
data: String, |
||||||
|
key: String, |
||||||
|
mode: String, |
||||||
|
padding: String, |
||||||
|
iv: String |
||||||
|
): String? { |
||||||
|
return createSymmetricCrypto( |
||||||
|
"DESede/${mode}/${padding}", |
||||||
|
Base64.decode(key, Base64.NO_WRAP), |
||||||
|
iv.encodeToByteArray() |
||||||
|
).encryptBase64(data) |
||||||
|
} |
||||||
|
|
||||||
|
//******************消息摘要/散列消息鉴别码************************// |
||||||
|
|
||||||
|
/** |
||||||
|
* 生成摘要,并转为16进制字符串 |
||||||
|
* |
||||||
|
* @param data 被摘要数据 |
||||||
|
* @param algorithm 签名算法 |
||||||
|
* @return 16进制字符串 |
||||||
|
*/ |
||||||
|
fun digestHex( |
||||||
|
data: String, |
||||||
|
algorithm: String, |
||||||
|
): String { |
||||||
|
return DigestUtil.digester(algorithm).digestHex(data) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 生成摘要,并转为Base64字符串 |
||||||
|
* |
||||||
|
* @param data 被摘要数据 |
||||||
|
* @param algorithm 签名算法 |
||||||
|
* @return Base64字符串 |
||||||
|
*/ |
||||||
|
fun digestBase64Str( |
||||||
|
data: String, |
||||||
|
algorithm: String, |
||||||
|
): String { |
||||||
|
return Base64.encodeToString(DigestUtil.digester(algorithm).digest(data), Base64.NO_WRAP) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 生成散列消息鉴别码,并转为16进制字符串 |
||||||
|
* |
||||||
|
* @param data 被摘要数据 |
||||||
|
* @param algorithm 签名算法 |
||||||
|
* @param key 密钥 |
||||||
|
* @return 16进制字符串 |
||||||
|
*/ |
||||||
|
@Suppress("FunctionName") |
||||||
|
fun HMacHex( |
||||||
|
data: String, |
||||||
|
algorithm: String, |
||||||
|
key: String |
||||||
|
): String { |
||||||
|
return HMac(algorithm, key.toByteArray()).digestHex(data) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 生成散列消息鉴别码,并转为Base64字符串 |
||||||
|
* |
||||||
|
* @param data 被摘要数据 |
||||||
|
* @param algorithm 签名算法 |
||||||
|
* @param key 密钥 |
||||||
|
* @return Base64字符串 |
||||||
|
*/ |
||||||
|
@Suppress("FunctionName") |
||||||
|
fun HMacBase64( |
||||||
|
data: String, |
||||||
|
algorithm: String, |
||||||
|
key: String |
||||||
|
): String { |
||||||
|
return Base64.encodeToString( |
||||||
|
HMac(algorithm, key.toByteArray()).digest(data), |
||||||
|
Base64.NO_WRAP |
||||||
|
) |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue