java jni 加密_JNI调用c++实现AES加密解密

最近项目中用到数据加密解密的功能,由于Android、iOS以及服务器端都需要用到这个功能。而不同平台上加密出来的密文是不一样的,这样导致互相之间密文无法使用。于是决定使用C/C++完成加密解密,其他平台调用的方式进行处理。

加密解密实现

AES加密的具体实现过程本文暂不讨论,实现代码是直接从openssl源码中抽出来。

加密解密调用以下两个方法:

int aes_encrypt(char * in, char* key, char * out) 加密//明文,密钥,密文

int aes_decrypt(char * in, char* key, char * out) 解密//密文,密钥,明文

明文需要从外部获取;一般情况下key需要自定义,所以也是外部获取;out是加密或者解密的结果,需要返回给调用者。

所以接下来需要做的就是获取外部数据,交给加密解密方法处理,返回结果到外部。

编写java本地方法

java调用c/c++代码是通过JNI来实现,在java中需要声明native方法。

AESUtil.java

public classAESUtil{public nativeString encrypt(String plainText, String key);public nativeString decrypt(String cipherText, String key);

}

javac编译AESUtil.java生成class文件AESUtil.class。

javah AESUtil生成AESUtil.h,该文件将会作为头文件包含到c项目中去。

打开AESUtil.h,代码如下:

/*DO NOT EDIT THIS FILE - it is machine generated*/#include

/*Header for class AESUtil*/#ifndef _Included_AESUtil#define _Included_AESUtil#ifdef __cplusplusextern "C"{#endif

/** Class: AESUtil

* Method: encrypt

* Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;*/JNIEXPORT jstring JNICALL Java_AESUtil_encrypt

(JNIEnv*, jobject, jstring, jstring);/** Class: AESUtil

* Method: decrypt

* Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;*/JNIEXPORT jstring JNICALL Java_AESUtil_decrypt

(JNIEnv*, jobject, jstring, jstring);

#ifdef __cplusplus

}#endif

#endi

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值