搭建Linux环境下OpenSSL编程开发环境

1. 生成OpenSSL库

下载OpenSSL源码:https://www.openssl.org/source/

得到 openssl-1.1.1s.tar.gz

解压

tar -xzvf openssl-1.1.1s.tar.gz -C ./

进入openssl目录,新建build目录,配置安装到build目录下

cd openssl-1.1.1s/

mkdir build

./config --prefix=/home/abc/pc/01_openssl/openssl-1.1.1s/build

编译openssl,需要一段时间

make

安装openssl,需要一段时间

make install

安装完成后,build目录下生成

bin  include  lib  share  ssl

includelib 目录及其子文件添加到代码工程中进行编程。

2. 使用xmake编译

安装xmake

bash <(wget https://xmake.io/shget.text -O -)

3. 工程实例

.
├── openssl
│   ├── include
│   │   └── openssl
│   │       ├── aes.h
│   │       ├── asn1.h
│   │       ├── ...
│   │       └── x509v3err.h
│   └── lib
│       ├── engines-1.1
│       │   ├── afalg.so
│       │   ├── capi.so
│       │   └── padlock.so
│       ├── libcrypto.a
│       ├── libcrypto.so -> libcrypto.so.1.1
│       ├── libcrypto.so.1.1
│       ├── libssl.a
│       ├── libssl.so -> libssl.so.1.1
│       ├── libssl.so.1.1
│       └── pkgconfig
│           ├── libcrypto.pc
│           ├── libssl.pc
│           └── openssl.pc
├── src
│   └── main.c
└── xmake.lua

工程中,openssl目录下放,OpenSSL编译后的 include 和 lib目录及文件。

工程中,src目录下放,用户源码。

工程中,xmake.lua,为xmake编译文件。

xmake.lua

add_rules("mode.debug", "mode.release")

-- 定义工程目标
target("test")
    -- 设置目标类型
    set_kind("binary") 


    -- 添加源代码文件
    -- add_files("main.c")
    add_files("src/**.c")

    -- 添加头文件搜索目录
    add_includedirs("openssl/include/")
    add_includedirs("src/")


    -- 添加对 libcrypto.a 和 libssl.a 的链接,相当于 -lcrypto 和 -lssl
    add_links("crypto")
    add_links("ssl")
    -- 添加链接搜索目录
    add_linkdirs("openssl/lib/")

main.c

#include 
#include 
#include 

int main(int argc,char **argv) 
{
    // 打印OpenSSL版本号
    printf("----------%s----------\n\n", SSLeay_version(SSLEAY_VERSION));
 
    /* 加载所有算法 */
    OpenSSL_add_all_algorithms();
 
    /* SM3摘要算法 */
    unsigned char md_value[EVP_MAX_MD_SIZE];        //保存输出的摘要值的数组
    unsigned int md_len;
    EVP_MD_CTX *pmdctx = EVP_MD_CTX_new();          //EVP消息结构体
    char msg1[] = "Test Message1";                  //待计算摘要的消息1
    char msg2[] = "Test Message2";                  //待计算只要的消息2
    int i=0;
 
 
    EVP_MD_CTX_init(pmdctx);                        //初始化摘要结构体
 
    //设置摘要算法和密码算法引擎,这里密码算法使用SM3
    //算法引擎使用OpenSSL默认引擎,即软算法
    EVP_DigestInit_ex(pmdctx,EVP_sm3(),NULL);
    EVP_DigestUpdate(pmdctx,msg1,strlen(msg1));     //调用摘要Update计算msg1的摘要
    EVP_DigestUpdate(pmdctx,msg2,strlen(msg2));     //调用摘要Update计算msg2的摘要
    EVP_DigestFinal_ex(pmdctx,md_value,&md_len);    //摘要结束,输出摘要值
    
    
    /* 打印结果 */
    printf("原始数据%s和%s的摘要为:\n",msg1,msg2);
    for(i=0;i

编译(xmake)及运行(xmake run)

abc@DESKTOP-RTI8Q49:~/pc/01_openssl/02_code$ xmake
[ 20%]: cache compiling.release src/main.c
[ 20%]: cache compiling.release src/my_printf/my_printf.c
[ 60%]: linking.release test
[100%]: build ok!

abc@DESKTOP-RTI8Q49:~/pc/01_openssl/02_code$ xmake run
----------OpenSSL 1.1.1  11 Sep 2018----------

原始数据Test Message1和Test Message2的摘要为:
B1 88 68 EA 3A 53 EA D8 C9 FF 73 ED B2 C8 A1 FE 2A A0 29 76 40 34 8B EA C4 35 1C 4A CF C0 6F B2 

你可能感兴趣的:(OpenSSL,linux)