Crypto++库安装、测试
项目中需要使用到C++加密解密库,选择了Crypto++这个开源库,于是先安装并写一个小例子试试
一、下载
网址:http://www.cryptopp.com/#download
二、打开项目
下载后加压缩,并进入目录,打开cryptest.sln文件,打开解决方案,此解决方案是用vs2005建立的
打开解决方案后,会看到有4个项目存在:cryptest、cryptlib、cryptopp、dlltest
我们得到的是Crypto++这个算法库的源码,如果想要在我们的项目中使用它,必须先把它编译成为库
生成项目cryptlib即可得到我们想要的库。
在适当地地方建立一个目录crypto++在内部新建lib和include目录分别存放头文件和生成的库。
三、编写我们的示例程序
首先需要把上一步得到的库和头文件路径添加到我们的示例程序项目中。
示例代码如下:
1 #include <iostream> 2 #include "aes.h" 3 4 #pragma comment(lib, "cryptlib.lib") 5 6 using namespace std; 7 using namespace CryptoPP; 8 9 int main(int argc, char **argv) 10 { 11 // AES使用的固定参数是以类AES中定义的ENUM数据类型出现的,而不是成员函数或者变量 12 // 因此需要用::符号来索引 13 cout << "AES Parameters: " << endl; 14 cout << "Algorigthm name: " << AES::StaticAlgorithmName() << endl; 15 16 // Crypto++库中一般用字节数表示长度,而不是常用的字节数 17 cout << "Block size: " << AES::BLOCKSIZE * 8 << endl; 18 cout << "Min Key length: " << AES::MIN_KEYLENGTH * 8 << endl; 19 cout << "Max key Lenght: " << AES::MAX_KEYLENGTH * 8 << endl; 20 21 // AES中只包含一些固定的数据,而加密解密的功能有AESEncryption和AESDecryption完成 22 AESEncryption aesEncryptor; // 加密器 23 24 unsigned char aesKey[AES::DEFAULT_KEYLENGTH]; // 密钥 25 unsigned char inBlock[AES::BLOCKSIZE] = "123456789"; // 要解密的数据块 26 unsigned char outBlock[AES::BLOCKSIZE]; // 加密后的密文 27 unsigned char xorBlock[AES::BLOCKSIZE]; // 必须为全零 28 29 memset(xorBlock, 0, AES::BLOCKSIZE); 30 31 aesEncryptor.SetKey(aesKey, AES::DEFAULT_KEYLENGTH); // 设置加密密钥 32 aesEncryptor.ProcessAndXorBlock(inBlock, xorBlock, outBlock); 33 34 // 以十六进制显示加密后的数据 35 for (int i = 0; i < 16; i++) 36 { 37 cout << hex << (int)outBlock[i] << " "; 38 } 39 cout << endl; 40 41 // 解密 42 AESDecryption aesDecryptor; 43 unsigned char plainText[AES::BLOCKSIZE]; 44 45 aesDecryptor.SetKey(aesKey, AES::DEFAULT_KEYLENGTH); 46 aesDecryptor.ProcessAndXorBlock(outBlock, xorBlock, plainText); 47 48 for (int i = 0; i < 16; i++) 49 { 50 cout << plainText[i]; 51 } 52 cout << endl; 53 54 return 0; 55 }
因为项目中选择使用对称加密算法aes来实现,所以只写了这一个示例,Crypto++库支持许多种加密解密算法,其他的待以后再来学习。
参考:
http://blog.163.com/kevinlee_2010/blog/static/169820820201162252718894/
http://www.cnblogs.com/linyawen/archive/2013/08/23/3277438.html
http://www.open-open.com/lib/view/open1381633246848.html
http://www.2cto.com/kf/201108/99205.html