Android AES加密的NDK实现
2017-10-09 13:51
621 查看
AES加密用java方式javax.crypto.Cipher这个类就行了,用NDK实现呢,也很简单。
代码如下:
源码地址:https://github.com/Ulez/EncryptLib
还有如果想要把加密后的字符显示出来,需要用Base64转码一下,不然显示的是乱码。
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转码一下,不然显示的是乱码。
相关文章推荐
- [Android]AES加密解密的实现
- Android AES加密实现
- android 5.0 AES加密实现
- AES三端加密解密 – iOS与Android,JS的同步实现
- android AES加密解密实现
- Android加密算法之AES加密和解密实现
- android实现视频的加密和解密(使用AES)
- Android加密算法之AES加密和解密实现
- 实现android的AES加密技术
- Android AES加密工具类实现(基础回顾)
- Android Studio ndk-Jni开发详细入门,Aes加密demo
- Android DES,AES,RSA加密实现
- Android AES和RSA混合加密工具类实现
- Android-ndk-64位so文件问题(RSA加密采用cpp代码实现)
- 基于Android系统的AES加密、解密的JAVA实现
- android中采用AES进行加密
- JAVA实现AES加密
- Android的NDK开发(5)——Android JNI层实现文件的read、write与seek
- Android的NDK开发(5)————Android JNI层实现文件的read、write与seek操作
- VB实现AES(Rijndael)加密的方法