如何用AES对内存块进行加密 有变量unsigned char *pc,unsigned char *enc_pc;我想对pc中的内容通过AES加密后保存到*enc_pc中,请教如何实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Crypto++® Libraryhttp://www.cryptopp.com/#include <iostream>using namespace std; #include <cryptopp/aes.h>using namespace CryptoPP;int main(){ //AES中使用的固定参数是以类AES中定义的enum数据类型出现的,而不是成员函数或变量 //因此需要用::符号来索引 cout << "AES Parameters: " << endl; cout << "Algorithm name : " << AES::StaticAlgorithmName() << endl; //Crypto++库中一般用字节数来表示长度,而不是常用的字节数 cout << "Block size : " << AES::BLOCKSIZE * 8 << endl; cout << "Min key length : " << AES::MIN_KEYLENGTH * 8 << endl; cout << "Max key length : " << AES::MAX_KEYLENGTH * 8 << endl; //AES中只包含一些固定的数据,而加密解密的功能由AESEncryption和AESDecryption来完成 //加密过程 AESEncryption aesEncryptor; //加密器 unsigned char aesKey[AES::DEFAULT_KEYLENGTH]; //密钥 unsigned char inBlock[AES::BLOCKSIZE] = "123456789"; //要加密的数据块 unsigned char outBlock[AES::BLOCKSIZE]; //加密后的密文块 unsigned char xorBlock[AES::BLOCKSIZE]; //必须设定为全零 memset( xorBlock, 0, AES::BLOCKSIZE ); //置零 aesEncryptor.SetKey( aesKey, AES::DEFAULT_KEYLENGTH ); //设定加密密钥 aesEncryptor.ProcessAndXorBlock( inBlock, xorBlock, outBlock ); //加密 //以16进制显示加密后的数据 for( int i=0; i<16; i++ ) { cout << hex << (int)outBlock[i] << " "; } cout << endl; //解密 AESDecryption aesDecryptor; unsigned char plainText[AES::BLOCKSIZE]; aesDecryptor.SetKey( aesKey, AES::DEFAULT_KEYLENGTH ); aesDecryptor.ProcessAndXorBlock( outBlock, xorBlock, plainText ); for( int i=0; i<16; i++ ) { cout << plainText[i]; } cout << endl; return 0;} CListCtrl如何象资源浏览器一样显示数据项信息? VC屏幕取色 VC操作剪切\复制\粘贴 那位有CRectTracker的源代码? GetTextExtentPoint32 在打印和打印预览时得到的结果不一样,为什么???????? 急!!!! 如何把 mp3 文件嵌入到 exe文件中? 熟悉音频压缩的朋友来看看 学了半天c++,今天看VC怎么里面的代码半天看不懂????怎么办???怎么看??? 关于单文档多视图的问题,有点邪阿? 程序员晚上工作到几点? 求AES源代码! ODBC中的select语句问题
using namespace std;
#include <cryptopp/aes.h>
using namespace CryptoPP;int main()
{ //AES中使用的固定参数是以类AES中定义的enum数据类型出现的,而不是成员函数或变量
//因此需要用::符号来索引 cout << "AES Parameters: " << endl;
cout << "Algorithm name : " << AES::StaticAlgorithmName() << endl; //Crypto++库中一般用字节数来表示长度,而不是常用的字节数
cout << "Block size : " << AES::BLOCKSIZE * 8 << endl;
cout << "Min key length : " << AES::MIN_KEYLENGTH * 8 << endl;
cout << "Max key length : " << AES::MAX_KEYLENGTH * 8 << endl; //AES中只包含一些固定的数据,而加密解密的功能由AESEncryption和AESDecryption来完成
//加密过程
AESEncryption aesEncryptor; //加密器 unsigned char aesKey[AES::DEFAULT_KEYLENGTH]; //密钥 unsigned char inBlock[AES::BLOCKSIZE] = "123456789"; //要加密的数据块 unsigned char outBlock[AES::BLOCKSIZE]; //加密后的密文块 unsigned char xorBlock[AES::BLOCKSIZE]; //必须设定为全零 memset( xorBlock, 0, AES::BLOCKSIZE ); //置零
aesEncryptor.SetKey( aesKey, AES::DEFAULT_KEYLENGTH ); //设定加密密钥 aesEncryptor.ProcessAndXorBlock( inBlock, xorBlock, outBlock ); //加密 //以16进制显示加密后的数据 for( int i=0; i<16; i++ ) { cout << hex << (int)outBlock[i] << " "; } cout << endl; //解密 AESDecryption aesDecryptor; unsigned char plainText[AES::BLOCKSIZE]; aesDecryptor.SetKey( aesKey, AES::DEFAULT_KEYLENGTH ); aesDecryptor.ProcessAndXorBlock( outBlock, xorBlock, plainText ); for( int i=0; i<16; i++ ) { cout << plainText[i]; }
cout << endl; return 0;
}