IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 在CLion中配置OpenSSL开发环境 -> 正文阅读

[C++知识库]在CLion中配置OpenSSL开发环境

1.环境

平台:Windows10

开发工具:CLion

OpenSSL:OpenSSL 1.1.1m(32位)

工具链:MingGW530_32

Win32OpenSSL-1_1_1m.msi-网络安全文档类资源-CSDN文库

2.SM3摘要Demo

2.1 使用CLion,新建一个C项目。

  1. 选择新建项目的类型,可以是C执行程序,也可以是C++执行程序。我们选择C执行程序;
  2. 选择项目存放的路径。我们命名项目名称为05_OpenSSL;
  3. 选择语言标准,使用默认的C99标准;
  4. 点击右下角Create俺就,创建项目。

项目中有两个重要文件:main.cCMakeLists.txt

main.c :源文件

CMakeLists.txt:CMake的配置文件,用于对软件编译过程进行控制。

?2.1运行程序

点击CLion右侧的三角Run按钮,在CLion下方输出程序运行结果。打印出Hello,World!

3. 默认的CMakeList.txt

新建项目中的CMakeLists.txt如下图:

# 指定CMake最低版本要求
cmake_minimum_required(VERSION 3.17)

#设置项目名称
project(05_OpenSSL C)

#环境变量 CMAKE_C_STANDARD 为99 ,使用C99标准
set(CMAKE_C_STANDARD 99)

#生成的执行文件05_OpenSSL ,main.c为生成可执行文件需要的源代码
add_executable(05_OpenSSL main.c)

4. Demo程序:使用OpenSSL的SM3计算摘要

4.1 修改CMakeLists.txt

增加OpenSSL头文件和库,链接库:

cmake_minimum_required(VERSION 3.17)
project(05_OpenSSL C)

set(CMAKE_C_STANDARD 99)


#定义两个变量,表示头文件路径和库路径
set(INC_DIR D:\\ProgramFiles\\OpenSSL-Win32\\include)
set(LINK_DIR D:\\ProgramFiles\\OpenSSL-Win32\\lib)

#依次设置头文件目录、库目录、要链接的库 (在add_executable 之前)
include_directories(${INC_DIR})
link_directories(${LINK_DIR})
link_libraries(openssl libcrypto)


add_executable(05_OpenSSL main.c)

#链接库 在add_executable之后 03_OpenSSL为工程名 ssl为库名称
target_link_libraries(05_OpenSSL openssl)

其中Windows中OpenSSL安装的路径为:D:\\ProgramFiles\\OpenSSL-Win32\\?

4.2 编码main.c

使用SM3计算摘要:

main.c

#include <stdio.h>
#include <string.h>
#include "openssl/evp.h"

int main() {
    printf("Hello, OpenSSL!\n");

    /* 加载所有算法 */
    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<md_len;i++)
    {
        printf("%02X ",md_value[i]);
    }
    printf("\n");

    return 0;
}

4.3 运行,输出如下结果:

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:17:43  更:2021-12-24 18:19:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:34:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码