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

验证输出结果.

最新文章

  1. HTTP 错误 500.24 - Internal Server Error的解决方法
  2. Linux 输入子系统
  3. 树莓派加入定时任务实现花生壳定时重启(linux的定时任务)
  4. Android MVC框架模式
  5. Java中普通代码块,构造代码块,静态代码块的代码演示样例及区分
  6. Xcode的Architectures、Valid Architectures和Build Active Architecture Only属性(原创)
  7. ASP.NET WebApi 使用Swagger生成接口文档
  8. Winfrom 简单的安卓手机屏幕获取和安卓简单操作
  9. 使用axios以及http-proxy-middleware代理处理跨域的问题
  10. ●BZOJ 4408 [Fjoi 2016]神秘数
  11. Unity文档阅读 第一章 入门
  12. gulp的使用(二)之gulpfile.js文件的配置
  13. js实现图片旋转
  14. SQL里执行CLR c#代码
  15. LeetCode——12. Integer to Roman
  16. ubuntu 16042 安装过程
  17. noip第2课资料
  18. LeetCode 292 Nim Game(Nim游戏)
  19. umeng友盟消息推送功能集成
  20. ABAP知识点提纲

热门文章

  1. JavaScript学习总结1
  2. 关于ubuntu下qt编译显示Cannot connect creator comm socket /tmp/qt_temp.xxx/stub-socket的解决的方法
  3. NET单元测试的艺术
  4. hdu 1028 母函数 一个数有几种相加方式
  5. thinkPHP四种URL访问方式(二)
  6. hdu4496 D-City
  7. 图像特征提取方法:Bag-of-words
  8. C++ Primer 学习笔记_61_重载操作符与转换 --自增/自减操作符
  9. HTC one/M7电信802d 毒蛇ViperOne2.1.0/高级毒蛇工具/完美root,精简/更多自定义,稳定,流畅ROM
  10. 利用try-catch判断变量是已声明未声明还是未赋值