C代码调用EVP库,实现AES对称加、解密功能。EVP(Enveloped Public Key)是 OpenSSL 中用于提供对称加密、非对称加密和哈希功能的高级加密接口。EVP 库提供了一个抽象的加密框架,使得可以在不同的算法实现之间进行切换,而不需要改变应用程序的代码。
下面分别用openssl命令和C语言方式实现相同的AES对称加、解密功能。
一、openssl命令AES对称加密、解密
1、使用OpenSSL的命令行工具进行AES-256-CBC加密
使用字符串 "aes_password" 作为密码,AES对称加密 "123456" 字符串。
$ echo -n "123456" | openssl enc -e -aes-256-cbc -a -nosalt -pass pass:aes_password
rUzai3Axmopjhq6rtiExmw== //结果
- -e:加密操作;(-d 表示解密)
- -aes-256-cbc:使用AES算法的256位密钥和CBC模式;
- -a:使用base64编码格式,将加密后的数据转为base64编码输出;
- -nosalt:不使用盐值。在AES-CBC模式中,盐值通常是随机生成的,以增加密钥的强度。
- -pass pass:<password> 指定了加密的密钥
2、解密
将加密后的密文解密
echo "rUzai3Axmopjhq6rtiExmw==" | openssl enc -d -aes-256-cbc -a -nosalt -pass pass:aes_password
结果为 "123456" 与加密前的字符串相同。
二、C语言AES对称加密、解密
直接给出C语言实现AES-256-CBC加密、解密的代码。
1、AES对称加密、解密代码
代码下载链接:https://download.youkuaiyun.com/download/hinewcc/89204956
- openssl_aes.c 函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/evp.h>
#include <openssl/aes.h>
#include "openssl_aes.h"
/*
*****************************************************************************************
* 函 数 名: base64_encode
* 功能说明: 对加密后的数据进行 base64 编码
* 形 参: _pInput : 输入数据
* _InLen : 输入数据长度
* _pOutput: 输出base64编码结果
* _pOutLen: 输出数据长度
* 返 回 值: 0:成功, -1:失败
*******************************************