Linux Kernel(Android) 加密算法汇总(四)-应用程序调用OpenSSL加密演算法
Linux Kernel(Android) 加密算法总结(三)-应用程序调用内核加密算法接口
讲到了怎样调用内核中的接口的方法。
本节主要是介绍怎样Android C/C++应用程序调用Openssl的AES加密算法。
crypt_ssl.c
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <aes.h>
#include <sys/socket.h>
#include <linux/if_alg.h>
#include <evp.h> #include <stdio.h>
#include <stdlib.h> #ifndef AF_ALG
#define AF_ALG 38
#define SOL_ALG 279
#endif #define BUF_SIZE 16 static void crypt_ssl(char *in, int inlen, char *out,const char *key, char *iv)
{
AES_KEY akey;
AES_set_encrypt_key(key, 128, &akey);
AES_cbc_encrypt(in, out, inlen, &akey, iv, 1);
} int main(int argc, char **argv)
{
int i;
char out[BUF_SIZE] = {0};
char in[BUF_SIZE] = "Single block msg";
const char key[16] =
"x06xa9x21x40x36xb8xa1x5b"
"x51x2ex03xd5x34x12x00x06";
char iv[16] =
"x3dxafxbax42x9dx9exb4x30"
"xb4x22xdax80x2cx9fxacx41"; if(argc != 2)
{
printf("usage:compare openssl / compare kernel \n");
} if(strncmp(argv[1], "openssl", 7) == 0)
{
printf("encrypt by openssl...n");
crypt_ssl(in, BUF_SIZE, out, key, iv);
} for (i = 0; i < BUF_SIZE; i )
printf("0x", (unsigned char)out[i]);
printf("n");
return 0;
}
在Android 源码编译文件:
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) LOCAL_MODULE := myencrypt LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := \
crypt_ssl.c LOCAL_SHARED_LIBRARIES := \
libdl \
liblog \
libcrypto LOCAL_C_INCLUDES := \
external/openssl/include/openssl \
external/openssl/include include $(BUILD_EXECUTABLE)
编译完毕后在
adb push testhash /system/bin/
adb shell chmod a+x /system/bin/testhash
adb shell testhash
验证输出结果.
Linux Kernel(Android) 加密算法汇总(四)-应用程序调用OpenSSL加密演算法的更多相关文章
- Linux Kernel(Android) 加密算法汇总(三)-应用程序调用内核加密算法接口
于Linux Kernel(Android) 加密算法总结(cipher.compress.digest)文章中.介绍了怎样在内核中增加三种不同类型的内核加密算法, 并给出了在内核模块中怎样调用他们的 ...
- Linux Kernel(Android) 加密算法总结(一)(cipher、compress、digest)
1. Linux内核支持哪些加密算法 ? 内核支持的加密算法非常多,包含: 对称加密算法.如AES,3DES. 对称password体制的发展趋势将以分组password为重点. 分组password ...
- Linux:使用rpcgen实现64位程序调用32位库函数
摘要:本文介绍使用rpcgent实现64位程序调用32位库函数的方法,并给出样例代码. 我的问题 我的程序运行在64位Linux系统上,需要使用一个从外部获得的共享库中的函数,这个共享库是32位的,无 ...
- 【Android工具】DES终结者加密时报——AES加密演算法
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的两篇文章中.我们介绍了DES算法,3DES算法以及他们的Android程序实现,并研究了怎样才干实现 ...
- Android进阶(二十)AndroidAPP开发问题汇总(四)
· Android进阶(二十)AndroidAPP开发问题汇总(四) android:layout_width和android:width的区别 基中的android:layout_width和and ...
- 编译android的linux kernel goldfish
https://source.android.com/source/building-kernels.html $ export PATH=/home/hzh/oldhome/learn/androi ...
- 在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6564592 在前一篇文章提到,从源代码树下载下 ...
- Linux kernel的中断子系统之(四):High level irq event handler
返回目录:<ARM-Linux中断系统>. 总结:从架构相关的汇编处理跳转到Machine/控制器相关的handle_arch_irq,generic_handle_irq作为High l ...
- Android HAL层与Linux Kernel层驱动开发简介
近日稍微对Android中的驱动开发做了一些简要的了解. HAL:Hardware Abstract Layer 硬件抽象层,由于Linux Kernel需要遵循GPL开源协议,硬件厂商为了保护自己硬 ...
随机推荐
- C# Http以文件的形式上传文件
以下的是上传的方法: // <summary> /// 将本地文件上传到指定的服务器(HttpWebRequest方法) /// </summary> /// <para ...
- jQuery遍历函数
jQuery遍历函数包含了用于筛选.查找和串联元素的方法. .add():将元素加入到匹配元素的集合中. .andSelf():把堆栈中之前的元素集加入到当前集合中. .children():获得匹配 ...
- C++ 直方图匹配算法代码
/*-------------------------------------------------------------------------*/ // 函数名称: histeq() // 传 ...
- [Windows Phone]模仿魔兽3技能按钮SkillButton
简介: 模仿魔兽3技能按钮,带CD效果.使用的时候可以当做普通按钮使用,同时也支持Binding. 音效紧耦合在控件内部,因为控件本身目的就是模拟魔兽3的技能按钮,所以不考虑音效的扩展. Demo结构 ...
- [Android]mac下开发环境搭建
好像没神马好些的? 1.下载adt-bundle-mac-x86_64bit(http://developer.android.com/sdk/installing/bundle.html) 2.解压 ...
- nginx源代码分析--高性能server开发 常见的流程模型
1.高性能server 对于高性能server对于.处理速度和占用空间小是典型特性.特别是当server经验C10K问题的时候(网络server在处理数以万计的client连接时.往往出现效率低下甚至 ...
- [置顶] ※数据结构※→☆线性表结构(stack)☆============栈 序列表结构(stack sequence)(六)
栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表.栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据.栈 ...
- Entity Framework6使用SQL Server Compact免安装部署
原文:Entity Framework6使用SQL Server Compact免安装部署 使用Nuget安装以下包: EntityFramework.6.0.2 EntityFramework.Sq ...
- zoj3209(DLX)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16234 题意:给p张小纸片, 问能不能选出尽量少的一部分或全部数量 ...
- Oracle 最简单的随系统自己主动启动
Oracle 最简单的随系统自己主动启动 俗话说用户是上帝,他们有时候提出一个问题很的简单,就仅仅须要一句话,一分钟就完事了.可是拿到我们DBA来说,可能至少得半个小时甚至半个月才干满足他的一句话.有 ...