下载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
将 include 和 lib 目录及其子文件添加到代码工程中进行编程。
安装xmake
bash <(wget https://xmake.io/shget.text -O -)
.
├── 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