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开源协议,硬件厂商为了保护自己硬 ...
随机推荐
- 窗口显示于parent控件上(用到了ManualDock函数)
procedure TForm1.btn1Click(Sender: TObject); begin with TForm2.Create(self) do begin ManualDock(self ...
- MySQL 更新走全表和索引的评估记录数
#!/usr/bin/perl use DBI; $db_name='scan'; $ip='127.0.0.1'; $user="root"; $passwd="123 ...
- LeetCode——Populating Next Right Pointers in Each Node II
Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...
- Mysql主键索引、唯一索引、普通索引、全文索引、组合索引的区别
原文:Mysql主键索引.唯一索引.普通索引.全文索引.组合索引的区别 Mysql索引概念: 说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不 ...
- HDU3257 Hello World!
Hello World! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- Android实战开发租赁管理软件(适配UI,数据的存储,多线程下载)课程分享
亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系. 课程内容简单介绍 我们软件是基于移动设备的.所以我们必定的选择了安卓作为我们的开发工具.课 ...
- POJ 3340 & HDU 2410 Barbara Bennett's Wild Numbers(数学)
题目链接: PKU:http://poj.org/problem?id=3340 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2410 Descript ...
- Flexigrid的使用(整合Struts2)
Flexigrid是一个jQuery表格插件 下载地址:http://download.csdn.net/detail/itmyhome/7613879 用法: 一.相关资源文件的引入 <lin ...
- 基于Andoird 4.2.2的Account Manager源代码分析学习:创建选定类型的系统帐号
AccountManager.addAccount() public AccountManagerFuture<Bundle> addAccount(final String accoun ...
- tomcat 下部署 php
由于需要测试一个PHP的环境.故记录此处. 环境 OS:win8.1 up1 64bit tomcat :8.0.14 64bit php:php-5.6.2-Win32-VC11-x64.zip 将 ...