Android AES加密的NDK实现
来源:互联网 发布:斯米诺黑牌伏特加知乎 编辑:程序博客网 时间:2024/05/23 10:48
AES加密用java方式javax.crypto.Cipher这个类就行了,用NDK实现呢,也很简单。
NDK实现AES加密
这里我只做了ECB模式的加密,主要遇到的问题是加密后再次解密有一段乱码,而且奇葩的是每次执行效果不一定一样,c部分的代码是GitHub上搜索的,基本没有问题。后来发现在java 的string转化为byte,传入到C时会根据不足16位自动补全,只要在手动加上’\0’标识字符结束,然后在解密时也处理下这个结束字符,一切就正常了;
代码如下:
JNIEXPORT jbyteArray JNICALL Java_comulez_github_encryptlib_Encrypt4C_AES_1ECB_1decrypt_1byte (JNIEnv *env, jobject instance, jbyteArray originByte, jbyteArray keyByte) { jsize len = env->GetArrayLength(originByte); //获取长度 unsigned char *originChar = as_unsigned_char_array(env, originByte); unsigned char *keyByteChar = as_unsigned_char_array(env, keyByte); uint8_t buffer[len]; AES_ECB_decrypt(originChar, keyByteChar, buffer, len); int realLen = 0; for (int i = 0; i < len; i++) { if (buffer[i] == '\0') { break; } realLen++; } return as_byte_array(env, buffer, realLen);}
unsigned char *as_unsigned_char_array(JNIEnv *env, jbyteArray array) { int len = env->GetArrayLength(array); unsigned char *buf = new unsigned char[len+1]; env->GetByteArrayRegion(array, 0, len, reinterpret_cast<jbyte *>(buf)); buf[len]='\0'; return buf;}
源码地址:https://github.com/Ulez/EncryptLib
还有如果想要把加密后的字符显示出来,需要用Base64转码一下,不然显示的是乱码。
阅读全文
0 0
- Android AES加密的NDK实现
- Android AES加密实现
- android 5.0 AES加密实现
- android AES加密解密实现
- 基于Android系统的AES加密、解密的JAVA实现
- Android Studio ndk-Jni开发详细入门,Aes加密demo
- Android Studio ndk-Jni开发详细入门,Aes加密demo
- Android DES,AES,RSA加密实现
- 用NDK做了一个AES加密的库
- VB实现AES(Rijndael)加密的方法
- AES加密解密算法的Java实现
- php aes加密类的实现代码
- AES 加密解密的 JAVA 实现 【二】
- DES ,AES加密解密的实现
- android 上aes 加密的代码片段
- AES加密进行Android的SharedPreferences存储
- AES加密进行Android的SharedPreferences存储
- JAVA实现AES加密
- C#ToString() 格式化数值
- 获取JAVA[WEB]项目相关路径的几种方法(转载)
- 自定义View textview
- Java提高篇(37)--线程池
- Android开发艺术探索学习笔记3——View的事件体系
- Android AES加密的NDK实现
- 自定义view圆形进度条
- nginx做前端,apache作为后端的方案
- golang flag 解析入参
- bootstrap tips
- entities与primitive的区别
- Oracle 12c R2版本 Application Containers 特性(一)
- Java 调用 Rest api 设置经典 Linux 虚拟机的实例启停
- linux安装mysql