NDK 数据加解密-AES 对称加密

前言

网络传输过程中对数据进行加解密是非常必要的操作,Java 就可以实现数据加解密操作,但是使用 NDK 来做能提高安全性(密钥放在 so 文件中)和性能.

加密方式

在这个 Demo 中,我们使用 AES(对称加密)来处理数据. 对称加密的加解密双方持有完全相同的密钥,也就是说客户端和服务器约定一套"密码",大家传输数据都用此密钥加密,加密后的数据是不可读的,另一方拿到数据后马上用密钥解密数据. 这就好比二战时代的军情电报,大家都用同一套密码本,使用密码本将前线军情转换成别人读不懂的代号,接收方因为有同样的密码本,可以将这些代号逐一翻译成可读的信息.

我们的应用程序中的支付数据,关键接口数据基本会使用加密传输,避免网络请求被拦截后用户信息暴露给其他人.

实现过程

我们使用 AES/CBC/NoPadding 进行数据加解密,加解密操作由 Java 层处理,而密钥被保存在 JNI 层.

  • 首先编写 JNI 层代码,操作很简单,只是 JNI 从 Native 层获取一个字符串到 Java 层

#include "com_bailun_kai_encryptdemo_JniEncrypt.h"

JNIEXPORT jstring JNICALL Java_com_bailun_kai_encryptdemo_JniEncrypt_getAESPassWord
  (JNIEnv *env, jobject){
     //当前 AES 的密钥长度为 16 字节,128 bit
     return env->NewStringUTF("BlTEstHeLLoWORld");

  }
  • 加载 so 库
public class JniEncrypt {

    public native String getAESPassWord();


    static {

        System.loadLibrary("EncryptLib");

    }


}
  • 加解密过程
video2gif_20190827_100840.gif

你可能感兴趣的:(NDK 数据加解密-AES 对称加密)