📜  使用C++加密和解密文本文件(1)

📅  最后修改于: 2023-12-03 15:22:18.248000             🧑  作者: Mango

使用C++加密和解密文本文件

在计算机安全中,加密和解密是非常重要的操作。在C++中,可以使用各种算法来加密和解密文本文件,包括对称加密算法和非对称加密算法。

对称加密算法

对称加密算法使用相同的秘钥进行加密和解密。其中,最常用的对称加密算法是AES算法和DES算法。在C++中,可以使用Crypto++库中的AES和DES类来实现这些算法。

AES算法

以下是使用Crypto++库中的AES类加密和解密文本文件的示例代码:

#include <iostream>
#include <fstream>
#include <string>
#include "cryptlib.h"
#include "aes.h"
#include "modes.h"
#include "files.h"

int main(int argc, char* argv[])
{
    // 生成加密秘钥
    std::string key = "abcdefghijklmnop";

    // 打开明文文件
    std::string plainTextFile = "plainText.txt";
    std::ifstream inFile(plainTextFile, std::ios::binary);

    // 打开密文文件
    std::string cipherTextFile = "cipherText.txt";
    std::ofstream outFile(cipherTextFile, std::ios::binary);

    // 加密明文文件
    CryptoPP::AES::Encryption aesEncryption((unsigned char*)key.c_str(), key.size());
    CryptoPP::CBC_Mode_ExternalCipher::Encryption cbcEncryption(aesEncryption, (unsigned char*)"1234567890123456");

    CryptoPP::FileSource inSource(inFile, true,
        new CryptoPP::StreamTransformationFilter(cbcEncryption,
            new CryptoPP::FileSink(outFile)));

    // 解密密文文件
    inFile.close();
    outFile.close();

    inFile.open(cipherTextFile, std::ios::binary);
    outFile.open("decryptedText.txt", std::ios::binary);

    CryptoPP::AES::Decryption aesDecryption((unsigned char*)key.c_str(), key.size());
    CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption(aesDecryption, (unsigned char*)"1234567890123456");

    CryptoPP::FileSource inSource2(inFile, true,
        new CryptoPP::StreamTransformationFilter(cbcDecryption,
            new CryptoPP::FileSink(outFile)));

    inFile.close();
    outFile.close();

    return 0;
}
DES算法

以下是使用Crypto++库中的DES类加密和解密文本文件的示例代码:

#include <iostream>
#include <fstream>
#include <string>
#include "cryptlib.h"
#include "des.h"
#include "modes.h"
#include "files.h"

int main(int argc, char* argv[])
{
    // 生成加密秘钥
    std::string key = "abcdefgh";

    // 打开明文文件
    std::string plainTextFile = "plainText.txt";
    std::ifstream inFile(plainTextFile, std::ios::binary);

    // 打开密文文件
    std::string cipherTextFile = "cipherText.txt";
    std::ofstream outFile(cipherTextFile, std::ios::binary);

    // 加密明文文件
    CryptoPP::DES_EDE2::Encryption desEncryption((unsigned char*)key.c_str(), key.size());
    CryptoPP::CBC_Mode_ExternalCipher::Encryption cbcEncryption(desEncryption, (unsigned char*)"12345678");

    CryptoPP::FileSource inSource(inFile, true,
        new CryptoPP::StreamTransformationFilter(cbcEncryption,
            new CryptoPP::FileSink(outFile)));

    // 解密密文文件
    inFile.close();
    outFile.close();

    inFile.open(cipherTextFile, std::ios::binary);
    outFile.open("decryptedText.txt", std::ios::binary);

    CryptoPP::DES_EDE2::Decryption desDecryption((unsigned char*)key.c_str(), key.size());
    CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption(desDecryption, (unsigned char*)"12345678");

    CryptoPP::FileSource inSource2(inFile, true,
        new CryptoPP::StreamTransformationFilter(cbcDecryption,
            new CryptoPP::FileSink(outFile)));

    inFile.close();
    outFile.close();

    return 0;
}
非对称加密算法

非对称加密算法使用一对秘钥进行加密和解密。其中,最常用的非对称加密算法是RSA算法。在C++中,可以使用Crypto++库中的RSA类来实现这些算法。

以下是使用Crypto++库中的RSA类加密和解密文本文件的示例代码:

#include <iostream>
#include <fstream>
#include <string>
#include "cryptlib.h"
#include "rsa.h"
#include "osrng.h"
#include "files.h"

int main(int argc, char* argv[])
{
    // 生成公钥和私钥
    CryptoPP::AutoSeededRandomPool rng;

    CryptoPP::RSA::PrivateKey privateKey;
    privateKey.GenerateRandomWithKeySize(rng, 3072);

    CryptoPP::RSA::PublicKey publicKey(privateKey);

    // 打开明文文件
    std::string plainTextFile = "plainText.txt";
    std::ifstream inFile(plainTextFile, std::ios::binary);

    // 打开密文文件
    std::string cipherTextFile = "cipherText.txt";
    std::ofstream outFile(cipherTextFile, std::ios::binary);

    // 加密明文文件
    CryptoPP::FileSource inSource(inFile, true,
        new CryptoPP::PK_EncryptorFilter(rng, publicKey,
            new CryptoPP::FileSink(outFile)));

    // 解密密文文件
    inFile.close();
    outFile.close();

    inFile.open(cipherTextFile, std::ios::binary);
    outFile.open("decryptedText.txt", std::ios::binary);

    CryptoPP::FileSource inSource2(inFile, true,
        new CryptoPP::PK_DecryptorFilter(rng, privateKey,
            new CryptoPP::FileSink(outFile)));

    inFile.close();
    outFile.close();

    return 0;
}

以上就是使用C++实现加密和解密文本文件的方法。其中,对称加密算法主要包括AES算法和DES算法,而非对称加密算法主要包括RSA算法。在实际应用中,需要根据数据的安全性和实时性来选择不同的加密算法。