parent
2838bd6984
commit
a57eb82236
@ -0,0 +1,474 @@ |
||||
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.symmetric.SymmetricCrypto |
||||
import io.legado.app.utils.MD5Utils |
||||
|
||||
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