首先我尝试使用Cipher Class,但由于性能问题我不得不放弃它。Cipher Class 产生大量实例,GC 崩溃。另一种选择是使用 NDK,所以我设法构建了openssl-android。现在使用 libcrypto.so 和 libssl.so 构建,我不知道如何将它们与我的项目中的新 .c 文件链接,以制作我在 Java 端需要的加密函数的包装器。
这是 libcrypto.so 我需要的功能:
void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
size_t length, const AES_KEY *key,
unsigned char *ivec, const int enc);
包装器将是这样的: Java 端:
public static native byte[] AESEncrypt(byte[] in, byte[] key, byte[] ivec, int enc);
本机包装器(带有共享库的 .c 文件端)
jbyteArray Java_com_myApp_Main_AESEncrypt(JNIEnv* env, jobject this, jbyteArray in, jbyteArray key, jbyteArray ivec, jint enc)
提前谢谢,如果我的英语不是最好的,对不起。