C++使用openssl的EVP对文件进行AES-256-CBC加解密

1、背景

    有项目需求,有对文件进行加密的功能,经过评估,最终决定使用AES-256-CBC加密。在C++中要实现这种加密有很多中方式和第三方库,由于运行环境的限制,可选择的库不多,最终决定使用openssl来进行。

    关于AES加密的相关知识直接百度就可以百度到了,这里就不赘述了。

2、加密

XuFile.h

//
// Created by zhengqiuxu on 2021/10/15.
//

#ifndef VIS_ADOS_I7_XUFILE_H
#define VIS_ADOS_I7_XUFILE_H


#include <vector>
#include <string>
#include <openssl/evp.h>
#include <openssl/aes.h>
#include <openssl/rand.h>
#include <iostream>
#include <openssl/err.h>

class XuFile {
public:
    /**
     * 用AES-256-CBC的方式加密一个文件
     * @param inputFile : 输入文件(源文件)地址
     * @param outputFile : 输出文件(加密后的文件)地址
     * @param key : 密钥
     * @param iv : 初始向量
     * @return  0:成功  其他:失败
     */
    int encryptFile_AES_256_CBC(const std::string &inputFile, const std::string &outputFile, const uint8_t *key, const uint8_t *iv);


private:



};


#endif //VIS_ADOS_I7_XUFILE_H

XuFile.cpp

/**
 * 用AES-256-CBC的方式加密一个文件
 * @param inputFile : 输入文件(源文件)地址
 * @param outputFile : 输出文件(加密后的文件)地址
 * @param key : 密钥
 * @param iv : 初始向量
 * @return  0:成功  其他:失败
 */
int XuFile::encryptFile_AES_256_CBC(const std::string &inputFile, const std::string &outputFile, const uint8_t *key,
                                    const uint8_t *iv) {
    int ret = -1;

    try {
        /* 源文件的输入流 */
        std::ifstream srcIn(inputFile.c_str(), std::ios_base::in | std::ios_base::binary | std::ios_base::ate);
        /* 加密后的文件的输出流 */
        std::ofstream decOut(outputFile.c_str(), std::ios_base::out | std::ios_base::binary);
        /* 如果都打开了才能进行解密 */
        if (srcIn.is_open() && decOut.is_open()) {
            /* 初始化OpenSSL库 */
            OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \
 | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL);
            OPENSSL_init_crypto(OPENSSL_I
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值