Android jni aes加解密,实现文件的加解密,具体实现可以自行修改,上面的代码为简单介绍,下面的是JNI端实现文件加解密,可以修改为字符串加解密

#include "aes.h"
#include "modes.h"
#include "e_os2.h"
#include "aes_locl.h"
#include "opensslconf.h"
AES_KEY aes;

//aes cbc模式加解密用到的向量
unsigned char iv[AES_BLOCK_SIZE];

for (i = 0; i < AES_BLOCK_SIZE; i++) {
   iv[i] = 0;

}
//设置aes加密的key和加密的长度
AES_set_encrypt_key(key, 128, &aes);
//开始aes加密,注意作为cbc加密向量会改变
AES_cbc_encrypt((unsigned char*) string, encryptString, lenBuff, &aes, iv,AES_ENCRYPT);
JNIEXPORT jstring JNICALL Java_com_encrypt_EncryptActivity_aesEncryptFile(
        JNIEnv *env, jobject, jstring pathorg, jstring pathnow) {
    int len;
    char *buff;
    const char *filepathorg;
    const char *filepathnow;
    filepathorg = env->GetStringUTFChars(pathorg, 0);
    filepathnow = env->GetStringUTFChars(pathnow, 0);
    AES_KEY aes;
    unsigned int i;
    //aes加密所输入的字符串
    unsigned char *inputString;
    //aes加密后字符串指针
    unsigned char *encryptString;

    FILE* file = fopen(filepathorg, "rb+");
    if (file) {
        fseek(file, 0L, SEEK_END);
        len = ftell(file);
        buff = (char *) malloc((len + 1) * sizeof(char));
        memset(buff, 0, len + 1);
        fseek(file, 0L, SEEK_SET);
        fread(buff, 1, len + 1, file);
        fclose(file);
        //计算字符串的长度,如果不是16字节的倍数扩展为16字节的倍数
        if ((len) % AES_BLOCK_SIZE == 0) {
            //len = len + 1;
        } else {
            len = ((len) / AES_BLOCK_SIZE + 1) * AES_BLOCK_SIZE;
        }
        //为输入字符串分配空间
        inputString = (unsigned char*) calloc(len + 1, sizeof(unsigned char));
        memset(inputString, 0, len + 1);
        //为aes加密后字符串分配空间
        encryptString = (unsigned char*) calloc(len + 1, sizeof(unsigned char));
        memset(encryptString, 0, len + 1);
        //将从java段接收到的字串拷贝到加密输入字串中,注意类型不一致
        memcpy((char*) inputString, buff, len + 1);
        //设置加密向量,该值为加密初始值
        for (i = 0; i < AES_BLOCK_SIZE; i++) {
            iv[i] = 0;
        }
        //设置aes加密的key和加密的长度
        AES_set_encrypt_key(key, 128, &aes);
        //开始aes加密,注意作为cbc加密向量会改变
        AES_cbc_encrypt((unsigned char*) inputString, encryptString, len, &aes,
                iv, AES_ENCRYPT);
        FILE* filew = fopen(filepathnow, "wb");
        if (filew) {
            fwrite(encryptString, 1, len, filew);
            fclose(filew);
        } else {
            return env->NewStringUTF("Filed to create file!");
        }
    } else {
        return env->NewStringUTF("Filed to read file!");
    }
    //释放出从java端接收的字符串
    env->ReleaseStringUTFChars(pathorg, filepathorg);
    env->ReleaseStringUTFChars(pathnow, filepathnow);
    return 0;
}

1.aes加解密 采用openssl开源库进行处理
2.将核心ase的代码取出aes_core.cpp,aes.h,aes_locl.h,e_os2.h,modes.h,opensslconf.h
3.上述文件是openssl Aes加密的核心代码,如下介绍的是aes cbc模式的加密方式,AES_ENCRYPT该值设为AES_DECRYPT则为解密,iv向量初始化加解密必须一致

该代码只是简写,需要按照正常C或者C++格式书写

资源下载:Android jni aes base64加解密
http://192.210.60.138/dz/forum.php?mod=viewthread&tid=4&fromuid=1
(出处: IStudy)

Android jni aes加解密,实现文件的加解密,具体实现可以自行修改,上面的代码为简单介绍,下面的是JNI端实现文件加解密,可以修改为字符串加解密

时间: 2024-08-02 11:03:03

Android jni aes加解密,实现文件的加解密,具体实现可以自行修改,上面的代码为简单介绍,下面的是JNI端实现文件加解密,可以修改为字符串加解密的相关文章

通过例子来简单了解下TProgressBar的使用。 pas文件程序如下

unit Unit4; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls; type TForm4 = class(TForm) progress: TProgressBar; procedure FormCreate(Sender: TObject); private { Private declarations } public

Android开发自学笔记(Android Studio)&mdash;4.界面编程与View组件简单介绍

一.引言 Android应用开发最重要的一份内容就是界面的开发,无论你程序包含的内容多么优秀,如若没有一个良好的用户交互界面,最终也只是会被用户所遗弃.Android SDK提供了大量功能丰富的UI组件,开发者只需要拖拖拽拽就能完成简单的应用,这些只是界面的展示,如果要完成优秀的用户交互,事件响应机制当然也是重点,这是后话. Android SDK中绝大部分UI组件都在androd.widget及其子包.android.view及其子包下,Android应用中的所有UI组件都继承了View类,V

spring mvc 图片上传,图片压缩、跨域解决、 按天生成文件夹 ,删除,限制为图片代码等相关配置

spring mvc 图片上传,跨域解决 按天生成文件夹 ,删除,限制为图片代码,等相关配置 fs.root=data/ #fs.root=/home/dev/fs/ #fs.root=D:/fs/ #fs.domains=182=http://172.16.100.182:18080,localhost=http://localhost:8080 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE b

PHP 关于文件操作的简单介绍

文件操作一直是Web程序员头疼的地方,而文件操作在CMS这样的系统中又是必须的.如今,PHP文件操作的函数内容已经非常强大,文件这部分也是学习PHP非常重要的一部分,希望大家不要忽略.这篇文章会简单介绍一下PHP的几个基本文件操作,最后附有PHP文件函数汇总,供大家参考和学习. 1. 打开文件:fopen("文件名","模式"); 模式参数: r:只读,将文件指针指向文件头. r+:读/写,将文件指针指向文件头. w:只写,打开并清空文件的内容.如果文件不存在,则创

android中使用jni对字符串加解密实现分析

android中使用jni对字符串加解密实现分析 最近项目有个需求,就是要对用户的敏感信息进行加密处理,比如用户的账户密码,手机号等私密信息.在java中,就对字符串的加解密我们可以使用AES算法加密字符串,使用它的好处就不必多说了,但我们又知道android的源代码是可以被反编译的,所以使用纯Java方式的AES加密是不安全的,所以想到了使用android中的jni来对字符串加解密处理,它会产生一个.so文件,更重要的是它通过C/C++代码实现,所以安全行比较高,它可以被反编译成机器码,但几乎

字符串加解密

题目描述 1.对输入的字符串进行加解密,并输出. 2加密方法为: 当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B:字母Z时则替换为a: 当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0: 其他字符不做变化. 3.解密方法为加密的逆过程 #ifndef _ENCRYPTUNENCRYPT_ #define _ENCRYPTUNENCRYPT_ /*================================ Macros ========

python/shell字符串加解密

查看网上很多都是抄袭的代码,大同小异,在前辈的基础上优化代码: 可自动补全16x字符串位数,解密后移除还原 优化加密后得到的数据码为base64,更易使用 3. 增加参数实例 4. 增强代码可读性 #!/usr/bin/env python #coding: utf-8 ''' +-----------------------------------------------------------------------+ |Author: Cheng Wenfeng <[email prote

android系统AES解密服务器加密数据错误解决方案

之前的做了一个外包项目,里边有一些敏感的信息需要AES加密,但是同样的代码在服务器就可以加密解密,在android系统中就解密失败,会出现pad block corrupted错误,下面给出解决方案, 亲测无问题! AES.java public class AES { public static final String VIPARA = "0123456789abcdef"; public static final String bm = "UTF-8"; pu

字符串加密解密

字符串加密(指定加密密钥) 如字符串"Good good study,day day up! You can you up,no can no bibi!",加密密钥为"marchfour",对字符串进行加密 原理很简单,就是字符之间的异或 错误的代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 void encrypt_decode(char