feat:加密方式改为Native-SO

This commit is contained in:
Max
2024-01-08 16:01:45 +08:00
parent 5c1da135aa
commit 5540d6c6bc
7 changed files with 71 additions and 112 deletions

View File

@@ -29,6 +29,9 @@ android {
sourceSets {
main {
jniLibs.srcDirs = ['libs']
java.srcDirs = [
'src/main/java',
'src/module_easypermission/java',
@@ -37,6 +40,7 @@ android {
'src/module_common/java',
'src/module_utils/java',
'src/module_core/java',
'src/module_encrypt/java',
]
@@ -47,6 +51,7 @@ android {
'src/module_common/res',
'src/module_utils/res',
'src/module_core/res',
'src/module_encrypt/res',
]

Binary file not shown.

Binary file not shown.

BIN
library/libs/x86/libencrypt.so Executable file

Binary file not shown.

BIN
library/libs/x86_64/libencrypt.so Executable file

Binary file not shown.

View File

@@ -1,83 +1,15 @@
package com.yizhuan.xchat_android_library.utils.codec;
import android.util.Base64;
import com.example.lib_encrypt.EncryptLib;
import com.yizhuan.xchat_android_library.utils.StringUtils;
import java.nio.charset.Charset;
import java.security.Key;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
//import sun.misc.BASE64Decoder;
//import sun.misc.BASE64Encoder;
public class DESUtils {
// static BASE64Decoder decoder = new BASE64Decoder();
// static BASE64Encoder encoder = new BASE64Encoder();
static String DES = "DES";
static String ENCODE = "UTF-8";//保持平台兼容统一使用utf-8
//des 加密
private static byte[] encryptByteDES(byte[] byteD, String strKey) throws Exception {
return doEncrypt(byteD, getKey(strKey), DES);
}
//des 解密
private static byte[] decryptByteDES(byte[] byteD, String strKey) throws Exception {
return doDecrypt(byteD, getKey(strKey), DES);
}
public static SecretKey getKey(String strKey) throws Exception {
DESKeySpec desKeySpec = new DESKeySpec(strKey.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey sk = keyFactory.generateSecret(desKeySpec);
return sk;
}
public static void main(String[] args) throws Exception {
String text = "admin";
// String pwd = "NJD783iSDK0d9fjd98KKDf9O";
String pwd = "1ea53d260ecf11e7b56e00163e046a26";
//客户端加密
// String data = DESAndBase64Encrypt(text, pwd);
// System.out.println(ResUtil.getString(R.string.utils_codec_desutils_01) + URLEncoder.encode(data, "UTF-8"));
//服务端解密
// String textDecrypt = DESAndBase64Decrypt(data, pwd);
// System.out.println(ResUtil.getString(R.string.utils_codec_desutils_02) + text);
// System.out.println(ResUtil.getString(R.string.utils_codec_desutils_03) + textDecrypt);
// byte[] bytes = text.getBytes();
// byte[] encode = Base64.encode(bytes,Base64.DEFAULT);
}
//客户端加密
public static String DESAndBase64Encrypt(String dataToEncrypt, String secretKey) throws Exception {
byte[] encryptData = encryptByteDES(dataToEncrypt.getBytes(ENCODE), secretKey);//这里加密前不要处理加密数据的空格换行等事情
byte[] encode = Base64.encode(encryptData, Base64.DEFAULT);
String dataBase64 = StringUtils.toEncodedString(encode, Charset.defaultCharset());
return replaceBlank(dataBase64);
}
//客户端加密
public static String DESAndBase64Encrypt(String dataToEncypt) throws Exception {
byte[] encryptData = encryptByteDES(replaceBlank(dataToEncypt).getBytes(ENCODE), "1ea53d260ecf11e7b56e00163e046a26");
byte[] encode = Base64.encode(encryptData, Base64.DEFAULT);
String dataBase64 = StringUtils.toEncodedString(encode, Charset.defaultCharset());
return replaceBlank(dataBase64);
public static String DESAndBase64Encrypt(String dataToEncrypt) throws Exception {
return EncryptLib.INSTANCE.encryptTextDef1(dataToEncrypt);
}
public static String DESAndBase64(String psw) {
@@ -90,52 +22,16 @@ public class DESUtils {
return pwd;
}
public static String replaceBlank(String str) {
String dest = "";
if (str != null) {
Pattern p = Pattern.compile("\\s*|\t|\r|\n");
Matcher m = p.matcher(str);
dest = m.replaceAll("");
}
return dest;
}
//服务端解密
public static String DESAndBase64Decrypt(String dataBase64) throws Exception {
if (StringUtils.isEmpty(dataBase64)) return null;
byte[] encryptedData = Base64.decode(dataBase64, Base64.DEFAULT);
byte[] decryptedData = decryptByteDES(encryptedData, "1ea53d260ecf11e7b56e00163e046a26");
String textDecrypt = new String(decryptedData, ENCODE);
return textDecrypt;
return EncryptLib.INSTANCE.decryptTextDef1(dataBase64);
}
/**
* 执行加密操作
*
* @param data 待操作数据
* @param key Key
* @param type 算法 RSA or DES
* @return
* @throws Exception
*/
private static byte[] doEncrypt(byte[] data, Key key, String type) throws Exception {
Cipher cipher = Cipher.getInstance(type);
cipher.init(Cipher.ENCRYPT_MODE, key);
return cipher.doFinal(data);
}
/**
* 执行解密操作
*
* @param data 待操作数据
* @param key Key
* @param type 算法 RSA or DES
* @return
* @throws Exception
*/
private static byte[] doDecrypt(byte[] data, Key key, String type) throws Exception {
Cipher cipher = Cipher.getInstance(type);
cipher.init(Cipher.DECRYPT_MODE, key);
return cipher.doFinal(data);
//解密
public static String decryptDef2(String dataBase64) throws Exception {
if (StringUtils.isEmpty(dataBase64)) return null;
return EncryptLib.INSTANCE.decryptTextDef2(dataBase64);
}
}

View File

@@ -0,0 +1,58 @@
package com.example.lib_encrypt
import java.util.regex.Pattern
object EncryptLib {
init {
System.loadLibrary("encrypt")
}
fun encryptText(enc: String, key: String): String {
return replaceBlank(encrypt(replaceBlank(enc), key) ?: "")
}
fun decryptText(dec: String, key: String): String {
return decrypt(dec, key) ?: ""
}
fun encryptTextDef1(enc: String): String {
return replaceBlank(encryptDef(replaceBlank(enc)) ?: "")
}
fun decryptTextDef1(dec: String): String {
return decryptDef(dec) ?: ""
}
fun encryptTextDef2(enc: String): String {
return replaceBlank(encryptDef2(replaceBlank(enc)) ?: "")
}
fun decryptTextDef2(dec: String): String {
return decryptDef2(dec) ?: ""
}
private fun replaceBlank(str: String): String {
val p = Pattern.compile("\\s*|\t|\r|\n")
val m = p.matcher(str)
return m.replaceAll("")
}
// DES
private external fun encrypt(enc: String, key: String): String?
// DES
private external fun decrypt(dec: String, key: String): String?
// DES-默认KEY1
private external fun encryptDef(enc: String): String?
// DES-默认KEY1(1ea53d26)
private external fun decryptDef(dec: String): String?
// DES-默认KEY2
private external fun encryptDef2(enc: String): String?
// DES-默认KEY2(9fa73e66)
private external fun decryptDef2(dec: String): String?
}