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

一、安装

首先下载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的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux中使用OpenSSL的lssl库进行加密解密操作 (linux openssl -lssl)