利用C++写一份AES加密解密
时间: 2024-09-11 12:17:37 浏览: 46
aes.rar_c++ aes加密解密
在C++中实现AES加密解密通常需要使用一些现成的加密库,比如OpenSSL、Crypto++或Boost.Crypto等。下面是一个使用Crypto++库实现AES加密解密的简单示例:
首先,你需要安装Crypto++库。在大多数Linux发行版中,你可以使用包管理器进行安装。例如,在Ubuntu上,你可以使用以下命令安装Crypto++库:
```bash
sudo apt-get install libcrypto++-dev libcrypto++-doc libcrypto++-utils
```
然后,你可以编写如下的C++代码来实现AES加密和解密:
```cpp
#include <cryptopp/aes.h>
#include <cryptopp/filters.h>
#include <cryptopp/modes.h>
#include <cryptopp/hex.h>
#include <iostream>
#include <string>
int main()
{
using namespace CryptoPP;
// 密钥和初始化向量
byte key[AES::DEFAULT_KEYLENGTH], iv[AES::BLOCKSIZE];
memset(key, 0x00, AES::DEFAULT_KEYLENGTH);
memset(iv, 0x00, AES::BLOCKSIZE);
// 待加密的字符串
std::string plainText = "Hello World";
std::string cipherText, decryptedText;
try
{
// 加密
AES::Encryption aesEncryption(key, AES::DEFAULT_KEYLENGTH);
CBC_Mode_ExternalCipher::Encryption cbcEncryption(aesEncryption, iv);
StringSource ss1(plainText, true,
new StreamTransformationFilter(cbcEncryption,
new StringSink(cipherText)
) // StreamTransformationFilter
); // StringSource
// 输出加密后的数据,这里使用了十六进制编码
std::string encoded;
HexEncoder encoder;
encoder.Attach(new StringSink(encoded));
encoder.Put((byte*)&cipherText[0], cipherText.size());
encoder.MessageEnd();
std::cout << "Cipher Text: " << encoded << std::endl;
// 解密
AES::Decryption aesDecryption(key, AES::DEFAULT_KEYLENGTH);
CBC_Mode_ExternalCipher::Decryption cbcDecryption(aesDecryption, iv);
StringSource ss2(cipherText, true,
new StreamTransformationFilter(cbcDecryption,
new StringSink(decryptedText)
) // StreamTransformationFilter
); // StringSource
std::cout << "Decrypted Text: " << decryptedText << std::endl;
}
catch(const CryptoPP::Exception& e)
{
std::cerr << e.what() << std::endl;
exit(1);
}
return 0;
}
```
在上述代码中,我们使用了AES算法的CBC模式进行加密和解密。`key`是密钥,`iv`是初始化向量。`plainText`是我们要加密的字符串,`cipherText`是加密后的文本,`decryptedText`是解密后的文本。注意,为了安全起见,密钥和初始化向量不应该像示例中那样都是0,而应该是随机生成的。
编译上述代码时,需要链接Crypto++库:
```bash
g++ -o aes_example aes_example.cpp -lcryptopp
```
运行程序将会输出加密后的十六进制编码的密文和解密后的明文。
阅读全文