NDK是不含openSSL的,本日志记录了安卓系统下C程序如何使用openSSL的加密库。
- 新建md5Test.c文件,内容如下:
#include <stdio.h>
#include <string.h>
#include <openssl/md5.h>
int main(int argc, char* argv[]){
unsigned char buffer[32];
MD5_CTX ctx;
MD5_Init(&ctx);
if(argc >= 2){
printf("str = \"%s\"\n", argv[1]);
MD5_Update(&ctx, argv[1], strlen(argv[1]));
}
else{
printf("str = \"%s\"\n", argv[0]);
MD5_Update(&ctx, argv[0], strlen(argv[0]));
}
MD5_Final(buffer, &ctx);
printf("MD5 = %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n",
buffer[0], buffer[1], buffer[2], buffer[3],
buffer[4], buffer[5], buffer[6], buffer[7],
buffer[8], buffer[9], buffer[10], buffer[11],
buffer[12], buffer[13], buffer[14], buffer[15]
);
return 0;
}
这段程序仅仅使用了openSSL加密库的MD5接口,可以计算输入字符串的MD5值。
-
下载openSSL,从中提取所需头文件,或者从已有的编译环境中拷贝一份。这里我是从已配置好的,有用到openSSL加密库的环境中拷贝一份,放在md5Test.c所处同一目录下的"openssl"目录下。
-
下载openSSL,用NDK编译一份openSSL的加密库。其实安卓系统自带有openSSL的加密库,其路径是"/system/lib/libcrypto.so"。这里我直接将"/system/lib/libcrypto.so"拷贝到md5Test.c所处同一目录下的"lib"目录下。
-
编辑makefile文件,给编译器添加openSSL的头文件的搜索路径和动态库的搜索路径:
ARG1=-ID:\Android\ndk64\sysroot\usr\include -ID:\Android\ndk64\sysroot\usr\include\arm-linux-androideabi -I. -Wall -Wno-attributes
ARG2=--sysroot=D:\Android\ndk64\platforms\android-19\arch-arm -L.\lib -lcrypto -Wall
md5Test.out : md5Test.o
arm-linux-androideabi-gcc.exe -o md5Test.out md5Test.o $(ARG2)
md5Test.o : md5Test.c
arm-linux-androideabi-gcc.exe -c -o md5Test.o md5Test.c $(ARG1)
cls:
del md5Test.o
del md5Test.out
-
打开批处理命令行,敲make命令编译:
关于批处理命令行环境变量的配置方法,见安卓系统应用程序纯命令行编译环境_第一个C程序hello.c这篇笔记。
-
编译成功,生成了可执行文件md5Test.out:
-
将可执行文件拷贝到开发板上运行试试:
可以运行。
记于2019-03-11
网友评论