java 有一个接口是专门用来加密的 每次调用都会传入大字符 隔一段时间就会导致频繁gc 导致服务器直接挂掉 该怎么处理
是否可以考虑定义为静态对象,静态变量,静态方法呢?
//接口
String key = "a67de031547aecce6241df153de54db5";
//前端传入的大字符
String data = hashMap.get("data").toString();
String s = SM4Util.decryptEcb(key, data);
return R.ok().put("data",s);
//加密方法
public static String decryptEcb(String hexKey, String cipherText) {
// 用于接收解密后的字符串
String decryptStr = "";
// hexString-->byte[]
byte[] keyData = ByteUtils.fromHexString(hexKey);
// hexString-->byte[]
byte[] cipherData = ByteUtils.fromHexString(cipherText);
// 解密
byte[] srcData = new byte[0];
try {
srcData = decrypt_Ecb_Padding(keyData, cipherData);
// byte[]-->String
decryptStr = new String(srcData, ENCODING);
} catch (Exception e) {
e.printStackTrace();
}
return decryptStr;
}
public static byte[] decrypt_Ecb_Padding(byte[] key, byte[] cipherText) throws Exception
{
Cipher cipher = generateEcbCipher(ALGORITHM_NAME_ECB_PADDING,
Cipher.DECRYPT_MODE, key);
return cipher.doFinal(cipherText);
}
/**
* 生成ECB暗号
*
* @param algorithmName 算法名称
* @param mode 模式
* @param key
* @return
* @throws Exception
* @explain ECB模式(电子密码本模式:Electronic codebook)
*/
private static Cipher generateEcbCipher(String algorithmName, int mode, byte[] key)
throws Exception {
Cipher cipher = Cipher.getInstance(algorithmName,
BouncyCastleProvider.PROVIDER_NAME);
Key sm4Key = new SecretKeySpec(key, ALGORITHM_NAME);
cipher.init(mode, sm4Key);
return cipher;
}
接收的代码中有没有gc回收不了的垃圾未处理。