Android JNI Aes加密

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: /* * AES 加密工具类 * Created by mazaiting on 2018/7/3. */#include #include #include //#include "openssl/evp.
/*
 * AES 加密工具类
 * Created by mazaiting on 2018/7/3.
 */
#include <jni.h>
#include <cstring>
#include <android/log.h>
//#include "openssl/evp.h"
#include <openssl/evp.h>
#include <openssl/buffer.h>

#define TAG "AES_CPP"
#define LOGD(FORMAT, ...) __android_log_print(ANDROID_LOG_DEBUG,TAG,FORMAT,##__VA_ARGS__);

// 命名空间
//using namespace std;

extern "C" {
// 初始化key
const unsigned char *_key = (const unsigned char *) "0123456789012345";
// 初始化iv
const unsigned char *_iv = (const unsigned char *) "0123456789012345";

/**
* Use EVP to Base64 encode the input byte array to readable text
*/
char *base64(const unsigned char *inputBuffer, int inputLen) {
    EVP_ENCODE_CTX ctx;
    int base64Len = (((inputLen + 2) / 3) * 4) + 1; // Base64 text length
//    int pemLen = base64Len + base64Len/64; // PEM adds a newline every 64 bytes
    char *base64 = new char[base64Len];
    int result;
    EVP_EncodeInit(&ctx);
    EVP_EncodeUpdate(&ctx, (unsigned char *) base64, &result, (unsigned char *) inputBuffer,
                     inputLen);
    EVP_EncodeFinal(&ctx, (unsigned char *) &base64[result], &result);
    return base64;
}

/**
* Use EVP to Base64 decode the input readable text to original bytes
*/
char *unbase64(char *input, int length) {
    EVP_ENCODE_CTX ctx;
    int orgLen = (((length + 2) / 4) * 3) + 1;
    char *orgBuf = new char[orgLen];
    int result, tmpLen;
    EVP_DecodeInit(&ctx);
    EVP_DecodeUpdate(&ctx, (unsigned char *) orgBuf, &result, (unsigned char *) input, length);
    EVP_DecodeFinal(&ctx, (unsigned char *) &orgBuf[result], &tmpLen);
    result += tmpLen;
    return orgBuf;
}

JNIEXPORT jobjectArray JNICALL
Java_com_mazaiting_aesdemo_Encrypt_setValues(JNIEnv *env, jclass type) {
    // 待加密的数据
    const unsigned char *vItem = (const unsigned char *) "mazaiting";
    // 源数据长度
    int inLen = (int) strlen((const char *) vItem);
    // 加密长度
    int encLen = 0;
    // 输出长度
    int outlen = 0;
    // 加密数据长度
    unsigned char encData[1024] = {0};

    LOGD("source: %s\n", vItem);
    // 创建加密上下文
    EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
    // 初始化加密上下文
    EVP_CipherInit_ex(ctx, EVP_aes_256_ecb(), NULL, _key, _iv, 1);
    // 加密数据
    EVP_CipherUpdate(ctx, encData, &outlen, vItem, inLen);
    // 拼接长度
    encLen = outlen;
    // 结束加密
    EVP_CipherFinal(ctx, encData + outlen, &outlen);
    // 拼接
    encLen += outlen;
    // 释放
    EVP_CIPHER_CTX_free(ctx);
    // base64编码
    char *baseEnc = base64(encData, encLen);
    LOGD("encrypted : %s\n", baseEnc);
    // base64解码
    char *encData1 = unbase64(baseEnc, (int) strlen(baseEnc));
    // 解密长度
    int decLen = 0;
    // 解码数据长度
    outlen = 0;
    // 解码后的数据
    unsigned char decData[1024];
    // 创建解密上下文
    EVP_CIPHER_CTX *ctx2 = EVP_CIPHER_CTX_new();
    // 初始化解密
    EVP_CipherInit_ex(ctx2, EVP_aes_256_ecb(), NULL, _key, _iv, 0);
    // 执行解密
    EVP_CipherUpdate(ctx2, decData, &outlen, (const unsigned char *) encData1, encLen);
    // 设置长度
    decLen = outlen;
    // 结束解密
    EVP_CipherFinal(ctx2, decData + outlen, &outlen);
    // 拼接长度
    decLen += outlen;
    // 释放
    EVP_CIPHER_CTX_free(ctx2);
    // 设置字符串结尾标识
    decData[decLen] = '\0';
    LOGD("decrypt: %s\n", decData);
}
}
目录
相关文章
|
3月前
|
存储 安全 数据安全/隐私保护
打造安全防线!Python AES&RSA加密工具,黑客绕道走的秘籍
【9月更文挑战第9天】随着数字化时代的到来,信息安全问题日益凸显。本文将介绍如何使用Python结合AES与RSA两种加密算法,构建强大的加密工具。AES以其高效性和强安全性著称,适用于大量数据的快速加密;RSA作为非对称加密算法,在加密小量数据及实现数字签名方面表现卓越。通过整合两者,可以构建既安全又灵活的加密系统。首先,需要安装pycryptodome库。接着,实现AES加密与解密功能,最后利用RSA加密AES密钥,确保其安全传输。这种设计不仅提高了数据传输效率,还增强了密钥交换的安全性,为敏感数据提供坚实保护。
229 43
|
3月前
|
存储 安全 数据安全/隐私保护
浅谈对称加密(AES与DES)
浅谈对称加密(AES与DES)
69 1
|
4月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
293 1
|
3月前
|
数据安全/隐私保护
aes之ecb模式的加密解密
aes之ecb模式的加密解密
|
3月前
|
存储 安全 数据安全/隐私保护
安全升级!Python AES加密实战,为你的代码加上一层神秘保护罩
【9月更文挑战第12天】在软件开发中,数据安全至关重要。本文将深入探讨如何使用Python中的AES加密技术保护代码免受非法访问和篡改。AES(高级加密标准)因其高效性和灵活性,已成为全球最广泛使用的对称加密算法之一。通过实战演练,我们将展示如何利用pycryptodome库实现AES加密,包括生成密钥、初始化向量(IV)、加密和解密文本数据等步骤。此外,还将介绍密钥管理和IV随机性等安全注意事项。通过本文的学习,你将掌握使用AES加密保护敏感数据的方法,为代码增添坚实的安全屏障。
143 8
|
2月前
|
安全 测试技术 Go
Python 和 Go 实现 AES 加密算法的技术详解
Python 和 Go 实现 AES 加密算法的技术详解
103 0
|
3月前
|
安全 算法 数据安全/隐私保护
深度揭秘!Python加密技术的背后,AES与RSA如何守护你的数据安全
【9月更文挑战第10天】随着数字化时代的到来,数据安全成为企业和个人面临的重大挑战。Python 作为功能强大的编程语言,在数据加密领域扮演着重要角色。AES 和 RSA 是两种主流加密算法,分别以对称和非对称加密方式保障数据安全。AES(Advanced Encryption Standard)因其高效性和安全性,在数据加密中广泛应用;而 RSA 则利用公钥和私钥机制,在密钥交换和数字签名方面表现卓越。
84 3
|
3月前
|
存储 安全 数据库
双重防护,无懈可击!Python AES+RSA加密方案,构建最强数据安全堡垒
【9月更文挑战第11天】在数字时代,数据安全至关重要。AES与RSA加密技术相结合,构成了一道坚固防线。AES以其高效性保障数据加密,而RSA则确保密钥安全传输,二者相辅相成,提供双重保护。本文通过Python代码示例展示了这一加密方案的魅力,强调了其在实际应用中的重要性和安全性。使用HTTPS等安全协议传输加密密钥和密文,确保数据在数字世界中自由流通而无忧。
74 1
|
3月前
|
安全 数据安全/隐私保护 Python
情书也能加密?Python AES&RSA,让每一份数据都充满爱的密码
【9月更文挑战第8天】在这个数字化时代,情书不再局限于纸笔,也可能以电子形式在网络中传递。为了确保其安全,Python提供了AES和RSA等加密工具,为情书编织爱的密码。首先,通过安装pycryptodome库,我们可以利用AES对称加密算法高效保护数据;接着,使用RSA非对称加密算法加密AES密钥和IV,进一步增强安全性。即使情书被截获,没有正确密钥也无法解读内容。让我们用Python为爱情编织一张安全的网,守护每份珍贵情感。
50 2
|
4月前
|
算法 安全 数据安全/隐私保护
Android经典实战之常见的移动端加密算法和用kotlin进行AES-256加密和解密
本文介绍了移动端开发中常用的数据加密算法,包括对称加密(如 AES 和 DES)、非对称加密(如 RSA)、散列算法(如 SHA-256 和 MD5)及消息认证码(如 HMAC)。重点讲解了如何使用 Kotlin 实现 AES-256 的加密和解密,并提供了详细的代码示例。通过生成密钥、加密和解密数据等步骤,展示了如何在 Kotlin 项目中实现数据的安全加密。
149 1