NDK实现的工具库,支持AES的ECB和CBC加解密(支持emoji),MD5加盐
AES基于tiny-AES128-C扩展,根据key长度自动选择AES128、AES192、AES256
默认采用PKCS7Padding填充(和PKCS5Padding一样),加密后进行一次Base64
应用包名和签名的hash code放在native层,使用前会进行签名检验,防二次打包
JNITool.java :
public static native String pwdMD5(String str);
public static String encrypt(String str);
public static String decrypt(String str);
aes.c :
char *AES_ECB_PKCS7_Encrypt(const char *in, const uint8_t *key);
char *AES_ECB_PKCS7_Decrypt(const char *in, const uint8_t *key);
char *AES_CBC_PKCS7_Encrypt(const char *in, const uint8_t *key, const uint8_t *iv);
char *AES_CBC_PKCS7_Decrypt(const char *in, const uint8_t *key, const uint8_t *iv);
使用前记得修改jni_tool.cpp的以下内容:
static const char *app_packageName = "com.wtuadn.demo";
static const int app_signature_hash_code = -827662039;
static const uint8_t AES_KEY[] = "xS544RXNm0P4JVLHIEsTqJNzDbZhiLjr";
static const uint8_t AES_IV[] = "KXTUDEdBs9zGlvy7";
static const string PWD_MD5_KEY = "4J9lKuR2c8OuDPBAniEy5USFQdSM0An4";
app_signature_hash_code获取方法见demo
如果只用到ECB或者CBC算法,可以把aes.h头文件里没用到的定义注释掉,减小生成的so文件体积
#ifndef CBC
#define CBC 1
#endif
#ifndef ECB
#define ECB 1
#endif