私の問題は、さまざまなスレッドからランダムな値の文字列セットを復号化/暗号化していますが、何度も繰り返した後、メモリが急速に増加することです。
私の観察では、暗号化/復号化のたびに新しい文字列が生成され、それによりメモリが増加するため、メモリが増加します。
もう1つの注意点は、私の復号化/暗号化された文字列は、同じ文字列のセット(一部の文字列は新しい可能性があります)が多くのスレッドから暗号化/復号化されるため、非常に多くの同じ値を持つことですが、暗号化/復号化ごとに暗号がバイトを返すためです配列を作成し、再び文字列を構成するには、「new String()」関数を使用する必要があります。これにより、メモリが急速に増加する可能性があります。
これは、文字列を暗号化/復号化するための私のコードです
public static String encrypt(String key, String value) throws GeneralSecurityException
{
byte[] raw = key.getBytes();
if (raw.length != 16) {
throw new IllegalArgumentException("Invalid key size.");
}
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, new IvParameterSpec(new byte[16]));
byte[] cipherBytes= cipher.doFinal(value.getBytes());
byte[] encoded = org.apache.commons.codec.binary.Base64.encodeBase64(cipherBytes);
return new String(encoded);
}
public static String decrypt(String key, String encrypted) throws GeneralSecurityException
{
byte[] raw = key.getBytes();
if (raw.length != 16) {
throw new IllegalArgumentException("Invalid key size.");
}
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, new IvParameterSpec(new byte[16]));
byte[] byteDecodedText = org.apache.commons.codec.binary.Base64.decodeBase64(encrypted.getBytes()) ;
byte[] original = cipher.doFinal(byteDecodedText);
return new String(original);
}