openssl的交叉编译

1、openssl源码包下载

http://ftp.openssl.org/source/

http://distfiles.macports.org/openssl/

2、Ubuntu编译与安装openssl

# openssl库默认安装路径为:/usr/local/ssl/lib
tar zxvf openssl-1.0.2q.tar.gz
cd openssl-1.0.2q.tar.gz
./config -shared
make
sudo make install

3、交叉编译

  • 执行下面的命令配置工程
./config no-asm shared no-async --prefix=$(pwd)/install --cross-compile-prefix=arm-linux-
  • 参数说明
no-asm:  在交叉编译过程中不使用汇编代码代码加速编译过程;
shared: 生成动态连接库。
no-async: 交叉编译工具链没有提供GNU C的ucontext库
--prefix=: 安装路径
--cross-compile-prefix=: 交叉编译工具
  • 打开Makefile,删除里面所有的-m64和-m32编译选项。
  • 编译安装
make
make install

4、写一个使用rc4加解密的程序测试一下

  • cryptotest.h
#ifndef _CRYPTOTEST_H_
#define _CRYPTOTEST_H_
typedef enum {
	GENERAL = 0,
	ECB,
	CBC,
	CFB,
	OFB,
	TRIPLE_ECB,
	TRIPLE_CBC
}CRYPTO_MODE;
//string DES_Encrypt(const string cleartext, const string key, CRYPTO_MODE mode);
//string DES_Decrypt(const string ciphertext, const string key, CRYPTO_MODE mode);
char * RC4_Encrypt(const char *cleartext, const char * key, int cleartextlen, int keylen);
char * RC4_Decrypt(const char * ciphertext, const char * key, int cleartextlen, int keylen);
 
#endif //_CRYPTOTEST_H_
  • openssltest.c
#include "cryptotest.h"
#include <string.h>
#include <stdio.h>
 
int main()
{
	char cleartext[] = "中国北京12345$abcde%ABCDE@!!!";
	char *ciphertext;
	char key[] = "beijingchina1234567890ABCDEFGH!!!";
 
	ciphertext = RC4_Encrypt(cleartext, key, strlen(cleartext), strlen(key));
	char * decrypt = RC4_Decrypt(ciphertext, key, strlen(cleartext), strlen(key));
 
	printf("cleartext:%s\n", cleartext);
	printf("genarate ciphertext:%s\n", ciphertext);
	printf("src ciphertext:%s\n", ciphertext);
	printf("genarate ciphertext:%s\n", decrypt);
 
	if (strcmp(cleartext, decrypt) == 0)
		printf("RC4 crypto ok!!!\n");
	else
		printf("RC4 crypto error!!!\n");
	return 0;
}
  • rc4test.c
#include <stdlib.h>
#include <openssl/rc4.h>
#include <string.h>
#include "cryptotest.h"
 
char * RC4_Encrypt(const char *cleartext, const char * key, int cleartextlen, int keylen)
{
	RC4_KEY rc4key;
	char* tmp = malloc(cleartextlen + 1);
	memset(tmp, 0, cleartextlen + 1);
 
	RC4_set_key(&rc4key, keylen, (const unsigned char*)key);
	RC4(&rc4key, cleartextlen, (const unsigned char*)cleartext, tmp);
 
	return tmp;
}
 
char * RC4_Decrypt(const char * ciphertext, const char * key, int cleartextlen, int keylen)
{
	RC4_KEY rc4key;
	unsigned char* tmp = malloc(cleartextlen + 1);
	memset(tmp, 0, cleartextlen + 1);
 
	RC4_set_key(&rc4key, keylen, (const unsigned char*)key);
	RC4(&rc4key, cleartextlen, (const unsigned char*)ciphertext, tmp);
 
	return tmp;
}
  • makefile
#####################################################################
## file        : test makefile for build current dir .c   ##
## author      : jernymy                                  ##
## date-time   : 05/06/2010                               ##
#####################################################################
CC      = gcc
CPP     = g++
RM      = rm -rf
## debug flag
DBG_ENABLE   = 0
## source file path
SRC_PATH   := .
## target exec file name
TARGET     := openssltest
## get all source files
SRCS         += $(wildcard $(SRC_PATH)/*.c)
## all .o based on all .c
OBJS        := $(SRCS:.c=.o)
## need libs, add at here
LIBS := ssl crypto
## used headers  file path
INCLUDE_PATH := /home/linux/opt/openssl/include/
## used include librarys file path
LIBRARY_PATH := /home/linux/opt/openssl/lib/
## debug for debug info, when use gdb to debug
ifeq (1, ${DBG_ENABLE}) 
	CFLAGS += -D_DEBUG -O0 -g -DDEBUG=1
endif
## get all include path
CFLAGS  += $(foreach dir, $(INCLUDE_PATH), -I$(dir))
## get all library path
LDFLAGS += $(foreach lib, $(LIBRARY_PATH), -L$(lib))
## get all librarys
LDFLAGS += $(foreach lib, $(LIBS), -l$(lib))

all: clean build
build:
	$(CC) -c $(CFLAGS) $(SRCS)
	$(CC) $(CFLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS)
	$(RM) $(OBJS)
clean:
	$(RM) $(OBJS) $(TARGET)

猜你喜欢

转载自blog.csdn.net/liurunjiang/article/details/106289020
今日推荐