在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