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

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

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