c++文件加密解密的方法是什么

在C++中进行文件加密和解密通常采用对称加密算法,其中最常用的是AES(Advanced Encryption Standard)算法。以下是一个简单的C++代码示例,演示如何使用AES算法进行文件加密和解密:#include #include #include #include void

在C++中进行文件加密和解密通常采用对称加密算法,其中最常用的是AES(Advanced Encryption Standard)算法。以下是一个简单的C++代码示例,演示如何使用AES算法进行文件加密和解密:

#include <iostream>
#include <fstream>
#include <openssl/aes.h>
#include <openssl/rand.h>

void encryptFile(const std::string& inputFile, const std::string& outputFile, const std::string& key) {
    AES_KEY aesKey;
    AES_set_encrypt_key((unsigned char*)key.c_str(), 128, &aesKey);

    std::ifstream in(inputFile, std::ios::binary);
    std::ofstream out(outputFile, std::ios::binary);

    unsigned char iv[AES_BLOCK_SIZE];
    RAND_bytes(iv, AES_BLOCK_SIZE);
    out.write(reinterpret_cast<const char*>(iv), AES_BLOCK_SIZE);

    unsigned char inBuffer[AES_BLOCK_SIZE];
    unsigned char outBuffer[AES_BLOCK_SIZE];
    int numBytesRead = 0;
    while (in.read(reinterpret_cast<char*>(inBuffer), AES_BLOCK_SIZE)) {
        AES_cbc_encrypt(inBuffer, outBuffer, AES_BLOCK_SIZE, &aesKey, iv, AES_ENCRYPT);
        out.write(reinterpret_cast<char*>(outBuffer), AES_BLOCK_SIZE);
        numBytesRead += AES_BLOCK_SIZE;
    }

    in.close();
    out.close();
}

void decryptFile(const std::string& inputFile, const std::string& outputFile, const std::string& key) {
    AES_KEY aesKey;
    AES_set_decrypt_key((unsigned char*)key.c_str(), 128, &aesKey);

    std::ifstream in(inputFile, std::ios::binary);
    std::ofstream out(outputFile, std::ios::binary);

    unsigned char iv[AES_BLOCK_SIZE];
    in.read(reinterpret_cast<char*>(iv), AES_BLOCK_SIZE);

    unsigned char inBuffer[AES_BLOCK_SIZE];
    unsigned char outBuffer[AES_BLOCK_SIZE];
    int numBytesRead = 0;
    while (in.read(reinterpret_cast<char*>(inBuffer), AES_BLOCK_SIZE)) {
        AES_cbc_encrypt(inBuffer, outBuffer, AES_BLOCK_SIZE, &aesKey, iv, AES_DECRYPT);
        out.write(reinterpret_cast<char*>(outBuffer), AES_BLOCK_SIZE);
        numBytesRead += AES_BLOCK_SIZE;
    }

    in.close();
    out.close();
}

int main() {
    std::string inputFile = "plaintext.txt";
    std::string encryptedFile = "encrypted.bin";
    std::string decryptedFile = "decrypted.txt";
    std::string key = "mysecretkey";

    encryptFile(inputFile, encryptedFile, key);
    decryptFile(encryptedFile, decryptedFile, key);

    return 0;
}

在上面的示例中,encryptFile函数用于加密文件,decryptFile函数用于解密文件。需要注意的是,需要安装OpenSSL库,并在编译时链接对应的库文件。此外,文件加密和解密的过程中需要使用相同的密钥。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/915779.html

(0)
派派
上一篇 2024-03-06
下一篇 2024-03-06

相关推荐

  • 惠州网站建设是什么意思(惠州网络建站)

    惠州网站建设是什么意思,惠州网络建站 内容导航: 网站建设是什么意思 建筑图纸中XZD 300\1100\800是什么意思 b2c购物网站建设是什么意思 997是什么意思网络语 一…

    2022-05-19
    0
  • PHP中array_search()的用法是什么

    array_search()函数是用来在数组中搜索指定的值,并返回对应的键名的函数。它的语法为:array_search( $value, $array, $strict )参数说明:$value:要搜索的值。$array:要搜索的数组。$strict(可选):是否使用严格模式比较,默认为false。如果设置为true,则搜索时会进行类型检查。返回值:如果找到了指定的值,则返回对应的键名

    2024-02-01
    0
  • c语言求根号的函数怎么使用

    在C语言中,可以使用数学库中的sqrt函数来计算平方根。要使用sqrt函数,需要包含math.h头文件。下面是一个简单的示例代码,演示了如何使用sqrt函数计算根号值:#include #include int main() {double num = 16.0;double result = sqrt(num);printf(“Square root of

    2024-03-26
    0
  • DynamoDB怎么实现全局表和多区域复制

    在DynamoDB中实现全局表和多区域复制可以通过使用全局表和跨区域复制功能来实现。全局表是一种分布在多个区域的表,可以在全球范围内提供高可用性和低延迟。要创建全局表,首先需要选择一个主区域并创建一个表。然后在其他区域中创建一个或多个读取副本。数据在主区域中写入后,会自动复制到所有读取副本中,从而实现全局表的数据同步。跨区域复制是一种自动将数据复制到多个区域的功能。要启用跨区域复制,需要在创建

    2024-03-26
    0
  • 如何编写词条(词条怎么编辑)

    如何编写词条,词条怎么编辑内容导航:怎样在百度编辑自己的词条什么是词条‘如何编写词条的通过怎样编辑词条一、怎样在百度编辑自己的词条1、首先,在百度百科的搜索框中输入自己要创建的词条名称,并点击进入词条。2、然后,点击我来创建的按钮。3、

    2022-04-27
    0
  • 企业如何注册自己的网站(企业注册在什么网站上注册)

    企业如何注册自己的网站,企业注册在什么网站上注册内容导航:如何注册一个公司网站公司怎么注册网站怎样注册企业邮箱,如果没有域名怎么办哪个网站可以注册企业qq一、如何注册一个公司网站1、注册域名,找大点的域名经营商,而不是代理商,每

    2022-04-23
    0

发表回复

登录后才能评论