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

验证输出结果.

时间: 2024-11-05 03:40:55

Linux Kernel(Android) 加密算法总结(四)-应用程序调用OpenSSL加密算法的相关文章

Linux Kernel(Android) 加密算法总结(三)-应用程序调用内核加密算法接口

在Linux Kernel(Android) 加密算法总结(cipher.compress.digest)文章中,介绍了如何在内核中加入三种不同类型的内核加密算法, 并给出了在内核模块中如何调用他们的实例. 本文将主要介绍,如何在应用程序空间中(user space) 调用内核空间(kernel space)加密模块提供的加密算法API. 方法一:通过调用crypto: af_alg - User-space interface for Crypto API, Herbert Xu <[emai

Linux Kernel(Android) 加密算法总结(cipher、compress、digest)

1. Linux内核支持哪些加密算法 ? 内核支持的加密算法很多,包括: 对称加密算法,如AES: 摘要算法,如sha1,md5: 压缩算法,如deflate. 不过内核好像不支持非对称加密算法. 2. 加密算法源文件位置 这些算法作为加密函数框架的最底层,提供加密和解密的实际操作.这些函数可以在内核crypto文件夹下,相应的文件中找到. 3.  配置编译选项将加密算法作为模块编入内核 Cryptographic options 加密选项 Cryptographic API 提供核心的加密AP

android定义可以被其他程序调用的activity

在测试android调用其他应用的activity时,提示找不到对于的activity,经过检查发现在intent-filter的<category>中忘了写<category android:name="android.intent.category.DEFAULT"/>,自己定义的filter一定要写上这句,这是android默认添加的要求. android定义可以被其他程序调用的activity

android 系统构架和应用程序目录结构分析

一.Android系统构架 Android系统从底向上一共分了4层,每一层都把底层实现封装,并暴露调用接口给上一层. Linux内核(Linux Kernel) Android运行在linux kernel 2.6之上,但是把linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的. Linux 内核是硬件和软件层之间的抽象层. 中间件 中间件包括两部分:核心库和运行时(libraries & Android runtime) 核心库包括,SurfaceManage

android native HAL程序 java程序 linux kernel打印调用栈的方法

android native HAL程序 java程序 linux kernel打印调用栈的方法 关于android java打出调用栈的方法 1)方法一:refs:frameworks/base/services/java/com/android/server/ActivityManagerService.javastartProcessLocked(){Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "amProcessStart&quo

编译android的linux kernel goldfish

https://source.android.com/source/building-kernels.html $ export PATH=/home/hzh/oldhome/learn/android-4.2.2/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:${PATH} $ export ARCH=arm $ export SUBARCH=arm $ export CROSS_COMPILE=arm-eabi- $ make ARCH=arm g

在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6564592 在前一篇文章提到,从源代码树下载下来的最新Android源代码,是不包括内核代码的,也就是Android源代码工程默认不包含Linux Kernel代码,而是使用预先编译好的内核,也就是prebuilt/android-arm/kernel/kernel-qemu文件.那么,如何才能DIY自己的内核呢?这篇文章一一道来. 一. 首选

linux kernel的中断子系统之(四):High level irq event handler

一.前言 当外设触发一次中断后,一个大概的处理过程是: 1.具体CPU architecture相关的模块会进行现场保护,然后调用machine driver对应的中断处理handler 2.machine driver对应的中断处理handler中会根据硬件的信息获取HW interrupt ID,并且通过irq domain模块翻译成IRQ number 3.调用该IRQ number对应的high level irq event handler,在这个high level的handler中

Android linux kernel privilege escalation vulnerability and exploit (CVE-2014-4322)

In this blog post we'll go over a Linux kernel privilege escalation vulnerability I discovered which enables arbitrary code execution within the kernel. The vulnerability affected all devices based on Qualcomm chipsets (that is, based on the "msm&quo