我在Android项目上使用AES Decryption来解密大型字符串对象(> 1 MB)。
我正在使用这种方法:
public static String decryptAES(String cryptedString, byte[] byteArrayAESKey) {
try {
IvParameterSpec ips = new IvParameterSpec(General.InitVector.getBytes("UTF-8"));
SecretKey aesKey = new SecretKeySpec(byteArrayAESKey, "AES");
byte[] TBCrypt = Base64.decode(cryptedString, Base64.DEFAULT);
// Decryption cipher
Cipher decryptCipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
// Initialize PBE Cipher with key and parameters
decryptCipher.init(Cipher.DECRYPT_MODE, aesKey, ips);
// Decrypt the cleartext
byte[] deciphertext = decryptCipher.doFinal(TBCrypt); // this may take a long time depending on string input length
return new String(deciphertext, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
Log.e("AES", "Decrypt failed : " + e.getMessage());
return "";
}
}
效果很好,但在大型加密字符串上,许多设备上需要很长时间。
有没有办法在Android设备上改进此方法?我应该切断加密的字符串以加快进程吗?我应该使用SpongyCastle吗?
答案 0 :(得分:1)
byte[] deciphertext = decryptCipher.doFinal(TBCrypt);
不要这样做!而是考虑使用流,可能直接输出文件流(如果需要)?。
答案 1 :(得分:0)
有没有办法在Android设备上改进此方法?
也许,你可以看一下here,但有人说AES非常快。
我应该剪切加密字符串以加快处理速度吗?
是的,这应该是问题所在。通常,您只需要加密数据的关键部分。也许重构应该解决这个问题。
我应该使用SpongyCastle吗?
不知道,但如果我在哪里,我会先看看加密的数据。