Linux中使用OpenSSL的lssl库进行加密解密操作 (linux openssl -lssl)

在日常工作中,安全性越来越重要,特别是在数据交换和存储方面。为了保护敏感信息,加密和解密是必不可少的操作。Linux中有许多加密解密工具,其中OpenSSL是最为广泛使用的加密库之一。本文将介绍如何在Linux系统中使用OpenSSL的lssl库进行加密解密操作。

1. 安装OpenSSL库

在Linux系统中,默认情况下是没有安装OpenSSL库的。因此,我们需要首先在系统中安装OpenSSL库。具体的安装步骤会根据不同的Linux发行版而有所不同。以Ubuntu为例,我们可以通过以下的命令来安装OpenSSL库:

“`

sudo apt-get install libssl-dev

“`

安装成功后,我们就可以开始使用OpenSSL库的lssl库进行加密解密操作。

2. 使用lssl库进行加密解密操作

lssl是OpenSSL库的一个子集,它包含了加密、解密、签名和验证等功能。下面我们将逐步介绍如何使用lssl库进行加密解密操作。

在使用lssl库之前,我们首先需要引入lssl库的头文件和定义一些变量和宏。具体的代码如下:

“`c

#include

#include

#include

#define AES_BLOCK_SIZE 16

“`

以上代码中,我们引入了AES加密相关的头文件及相关的宏定义。下面我们将逐步介绍如何使用lssl库进行加密解密操作。

2.1 AES加密

AES加密是常见的加密算法之一。下面我们将介绍如何使用lssl库进行AES加密操作。

“`c

void aes_encrypt(unsigned char *plntext, int plntext_len, unsigned char *key,

unsigned char *iv, unsigned char *ciphertext)

{

EVP_CIPHER_CTX *ctx;

int len;

int ciphertext_len;

/* 创建并初始化EVP_CIPHER_CTX */

if (!(ctx = EVP_CIPHER_CTX_new()))

handleErrors();

/* 初始化加密操作 */

if (1 != EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv))

handleErrors();

/* 执行加密操作 */

if (1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plntext, plntext_len))

handleErrors();

ciphertext_len = len;

/* 结束加密操作 */

if (1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len))

handleErrors();

ciphertext_len += len;

/* 释放EVP_CIPHER_CTX */

EVP_CIPHER_CTX_free(ctx);

}

“`

以上代码中,我们使用了EVP_CIPHER_CTX来管理加密上下文,并初始化了加密操作。接着,我们调用EVP_EncryptUpdate函数从明文中读取数据,并调用EVP_EncryptFinal_ex函数完成加密操作。我们释放了EVP_CIPHER_CTX。

2.2 AES解密

解密操作与加密操作类似,只是调用的函数稍有不同。下面我们将介绍如何使用lssl库进行AES解密操作。

“`c

void aes_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key,

unsigned char *iv, unsigned char *plntext)

{

EVP_CIPHER_CTX *ctx;

int len;

int plntext_len;

/* 创建并初始化EVP_CIPHER_CTX */

if (!(ctx = EVP_CIPHER_CTX_new()))

handleErrors();

/* 初始化解密操作 */

if (1 != EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv))

handleErrors();

/* 执行解密操作 */

if (1 != EVP_DecryptUpdate(ctx, plntext, &len, ciphertext, ciphertext_len))

handleErrors();

plntext_len = len;

/* 结束解密操作 */

if (1 != EVP_DecryptFinal_ex(ctx, plntext + len, &len))

handleErrors();

plntext_len += len;

/* 释放EVP_CIPHER_CTX */

EVP_CIPHER_CTX_free(ctx);

}

“`

以上代码中,我们首先创建并初始化了EVP_CIPHER_CTX。接着,我们初始化了解密操作并调用EVP_DecryptUpdate函数从密文中读取数据。我们释放EVP_CIPHER_CTX。

3. 示例程序

为了演示lssl库的加密解密操作,我们编写了以下示例程序:

“`c

#include

#include

#include

#include

#include

#include

#define AES_BLOCK_SIZE 16

void handleErrors(void)

{

fprintf(stderr, “Error\n”);

abort();

}

void aes_encrypt(unsigned char *plntext, int plntext_len, unsigned char *key,

unsigned char *iv, unsigned char *ciphertext)

{

EVP_CIPHER_CTX *ctx;

int len;

int ciphertext_len;

/* 创建并初始化EVP_CIPHER_CTX */

if (!(ctx = EVP_CIPHER_CTX_new()))

handleErrors();

/* 初始化加密操作 */

if (1 != EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv))

handleErrors();

/* 执行加密操作 */

if (1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plntext, plntext_len))

handleErrors();

ciphertext_len = len;

/* 结束加密操作 */

if (1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len))

handleErrors();

ciphertext_len += len;

/* 释放EVP_CIPHER_CTX */

EVP_CIPHER_CTX_free(ctx);

}

void aes_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key,

unsigned char *iv, unsigned char *plntext)

{

EVP_CIPHER_CTX *ctx;

int len;

int plntext_len;

/* 创建并初始化EVP_CIPHER_CTX */

if (!(ctx = EVP_CIPHER_CTX_new()))

handleErrors();

/* 初始化解密操作 */

if (1 != EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv))

handleErrors();

/* 执行解密操作 */

if (1 != EVP_DecryptUpdate(ctx, plntext, &len, ciphertext, ciphertext_len))

handleErrors();

plntext_len = len;

/* 结束解密操作 */

if (1 != EVP_DecryptFinal_ex(ctx, plntext + len, &len))

handleErrors();

plntext_len += len;

/* 释放EVP_CIPHER_CTX */

EVP_CIPHER_CTX_free(ctx);

}

void print_hex(unsigned char *data, int len)

{

for (int i = 0; i

printf(“%02x”, data[i]);

}

printf(“\n”);

}

int mn()

{

unsigned char plntext[] = “OpenSSL-lssl-example”;

unsigned char key[AES_BLOCK_SIZE], iv[AES_BLOCK_SIZE];

unsigned char ciphertext[sizeof(plntext)];

unsigned char decryptedtext[sizeof(plntext)];

int decryptedtext_len, ciphertext_len;

/* 生成随机KEY和IV */

RAND_bytes(key, AES_BLOCK_SIZE);

RAND_bytes(iv, AES_BLOCK_SIZE);

printf(“Plntext: %s\n”, plntext);

/* 加密 */

aes_encrypt(plntext, strlen((char *) plntext), key, iv, ciphertext);

printf(“Ciphertext: “);

print_hex(ciphertext, sizeof(ciphertext));

/* 解密 */

aes_decrypt(ciphertext, sizeof(ciphertext), key, iv, decryptedtext);

/* 取出解密后的字符串,需要末尾加上’\0’才能打印出来 */

decryptedtext_len = sizeof(decryptedtext);

decryptedtext[decryptedtext_len] = ‘\0’;

printf(“Decrypted text: %s\n”, decryptedtext);

return 0;

}

“`

以上程序生成了随机的KEY和IV,然后使用KEY和IV对明文加密,最后对密文进行解密,并输出解密后的明文。

相关问题拓展阅读:

  • linux下的eclipse怎样使用openssl
  • linux下如何安装openssl包

linux下的eclipse怎样使用openssl

一、安装

首先下载openssL的原始文件包,例如openssl-1.0.1f.tar.gz

将该文件复制到工作区目录下,一般是/home下的个人文件夹

解压文件tar zxvf openssl-1.0.1f.tar.gz

进入文件内 cd openssl-1.0.1f

配置,将生成的openssL文件复制到系统默认的文件夹下,该步骤只要复制下面的代码就可以了:”./config –prefix=/usr/local/openssl shared”

执行make命令:make

使用root权限,安装openssL:sudo make install

至此,openssL安装完成。完成的目录中有两个比较重要,一个是include包,里面都是外部调用时可以查阅的.h头文件,另一个是lib包,里面有ssl和crypto的静态和共享文件包。第二步的配置,主老碰要是配置这两个文件。

二、在eclipse中配置的方法

在eclipse中必须配置include和lib两个变量。

新建一个C语言测试工程,例如openssL_test,右键-属性-C/C++ Build-设置,然后单击图中右侧之一个红框,也就是GCC C Compiler 下的include,做如下设置,这里的path就是上面include的位置。

OpenSSL在Linux Eclipse下使用的完整过程-附截图和测试程序

然后单击GCC C Linker 下的libraries ,做慧闹如下设置:

OpenSSL在Linux Eclipse下使用的完整过程-附截图和测试程序

ssl和crypto是用户手动加上去的,但不是随意写的,其实这两个变量对应着/usr/local/openssl/lib目录下的libssl.so和libcrypto.so文件。

另外要注意,如果建的工程为C++类型,上图中还会有一个G++的编译器设置选项,设置方式与GCC的一前含罩样就可以。

linux下如何安装openssl包

1.解压openssl-0.9.8k.tar.gz2.从终端(命令行)进入解压出来的目录openssl-0.9.8k下,在命令行执行./config –prefix=/usr3.执行make4.执行sudo make install安装完兆备燃看看usr/include目录下有没有openssl文件夹,有就安装完成,族虚可以直接引用滚睁里面的md5.h了

关于linux openssl -lssl的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

香港服务器首选树叶云,2H2G首月10元开通。
树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/173020.html<

(0)
运维的头像运维
上一篇2025-03-23 14:27
下一篇 2025-03-23 14:28

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注