编写c语言程序调用openssl编译出的动态链接库

文章目录

一、编译生成链接库

下载安装openssl并编译生成链接库的过程在我的另一篇文章中已经详细说明了:Ubuntu中安装OpenSSL

此外,我们还需要提前了解一些关于动态链接库的知识,具体内容可以在我的这篇文章中查看:一个简单的动态链接库示例

二、示例一:调用RAND_bytes函数

要调用OpenSSL库中的函数,需要在对应的C源文件中包含相应的头文件,并将库文件链接到程序中。

下面是一个简单的示例,演示如何在一个名为main.c的文件中使用OpenSSL库中的函数。

c 复制代码
#include <stdio.h>  
#include <openssl/rand.h>  
  
int main() {  
    // 生成一个随机的字节序列  
    unsigned char randomBytes[16];  
    RAND_bytes(randomBytes, sizeof(randomBytes));  
  
    // 打印生成的随机字节序列  
    printf("随机字节序列: ");  
    for (int i = 0; i < sizeof(randomBytes); i++) {  
        printf("%02x", randomBytes[i]);  
    }  
    printf("\n");  
  
    return 0;  
}

在这个示例中,引入了openssl/rand.h头文件,该文件包含RAND_bytes函数的声明。然后,在main函数中,通过调用了RAND_bytes函数来生成一个随机的字节序列,并将其打印出来。

要编译并链接这个程序,需要将OpenSSL库文件链接到该程序。可以使用下面的命令进行编译执行

bash 复制代码
gcc -o main main.c -lssl -lcrypto
bash 复制代码
./main

可以得到对应的输出结果

三、示例二:调用SHA256

首先新建一个main1.c文件,编写如下的代码

c 复制代码
#include <stdio.h>  
#include <openssl/sha.h>  
  
int main() {  
    unsigned char data[] = "Hello, World!";  
    unsigned char sha256_result[SHA256_DIGEST_LENGTH];  
    SHA256(data, strlen((char*)data), sha256_result);  
    printf("SHA256 Result: ");  
    for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {  
        printf("%02x", sha256_result[i]);  
    }  
    printf("\n");  
    return 0;  
}

之后编译执行,即可得到对应的结果

bash 复制代码
gcc -o main1 main1.c -lssl -lcrypto
bash 复制代码
./main1
相关推荐
Ajiang28247353041 小时前
对于C++中stack和queue的认识以及priority_queue的模拟实现
开发语言·c++
幽兰的天空1 小时前
Python 中的模式匹配:深入了解 match 语句
开发语言·python
Theodore_10224 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
网易独家音乐人Mike Zhou5 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
----云烟----6 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024066 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic7 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it7 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康7 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神7 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式