不引用任何数据库,写出基于c++的AES加密算法
时间: 2023-08-18 08:03:59 浏览: 99
C++资源大全之密码学、数据库、调试
这里提供一个基于 Crypto++ 库实现 AES 加密的简单示例代码,仅供参考:
```c++
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include <cryptlib.h>
#include <modes.h>
#include <aes.h>
using namespace std;
using namespace CryptoPP;
int main()
{
byte key[AES::DEFAULT_KEYLENGTH] = {0}; // 128位密钥
byte iv[AES::BLOCKSIZE] = {0}; // 初始向量
// 设置密钥和初始向量
string keyStr = "my key";
string ivStr = "my iv";
memcpy(key, keyStr.data(), keyStr.size());
memcpy(iv, ivStr.data(), ivStr.size());
// 明文信息
string plainText = "1234567890abcdef";
string cipherText;
try
{
// AES CBC 加密
CBC_Mode<AES>::Encryption encryptor(key, sizeof(key), iv);
StringSource(plainText, true, new StreamTransformationFilter(encryptor,
new StringSink(cipherText), BlockPaddingSchemeDef::BlockPaddingScheme::PKCS_PADDING));
}
catch (CryptoPP::Exception& e)
{
cerr << "Exception caught: " << e.what() << endl;
exit(1);
}
// 输出加密结果
cout << "Encrypted data: ";
for (size_t i = 0; i < cipherText.size(); ++i) {
cout << hex << setfill('0') << setw(2) << (int)(byte)cipherText[i];
}
cout << endl;
return 0;
}
```
这段代码使用了 Crypto++ 库中的 AES 函数库,实现了对单个数据块的加密操作。需要注意的是,由于 AES 算法是分块加密算法,因此对于更大的数据,需要进行分块处理。同时,在实际应用中,需要保证加密密钥的安全性,避免密钥被泄露。
阅读全文