Crypto++ 入门(1) 安装
来源:互联网 发布:搞笑的网络剧 编辑:程序博客网 时间:2024/06/05 00:30
这篇文章主要介绍的是如何安装Crypto++。
以下所有文章基于的软件环境为:
Windows 7 64位
Visual Studio 2010
我们首先需要去下载Crypto++,其官网为www.cryptopp.com,从这上面可以下载最新版Crypto++,版本号为5.62。
下载之后在本地解压缩,得到一个文件夹,打开这个文件夹的cryptest.sln,即\cryptopp562\cryptest.sln.打开之后VS2010要先对解决方案进行转换,点击“下一步”,选择是否备份,之后点击完成即可。在解决方案资源管理器中我们可以看到如下画面:
由于我主要开发基于MFC的程序,所以需要对这几个项目的属性进行一下设置,不然在之后的开发中会出现一个问题,这个问题在本文最后会介绍给大家。我们需要对每个项目的属性进行一下设置。点开每个项目的配置属性(Alt + F7)->C/C++->代码生成->运行库改为/MDd(DEBUG)或者/MD(RELEASE)。每个项目都这样设置完成之后,我们点击“启动调试”即可。之后VS2010会报一个错,如下图所示,我们先不管他。
PS:这里要在DEBUG和RELEASE模式之下都进行一次调试,以便编译出供我们在这两个模式之下使用的lib文件。
在两种模式之下都进行编译之后,我们可以在\cryptopp562\Win32\Output\Debug中找到cryptlib.lib(RELEASE版的在\cryptopp562\Win32\Output\Release中)。接下来我们可以在C:\ProgramFiles\中建立CryptoPP文件夹,在这个文件夹中建立include和lib两个子文件夹,将\cryptopp562文件夹之下的所有文件(不包括子文件夹)复制到C:\Program Files\CryptoPP\include中。在C:\ProgramFiles\CryptoPP\lib中建立debug和release两个文件夹,分别将上面所说的两个cryptlib.lib复制到相应文件夹下。
在完成上面的步骤之后,每次我们新建项目,如果想要使用Crypto++库,只要在项目的配置属性中完成以下设置即可:
配置属性(Alt + F7)->C/C++->常规->附加包含目录,添加C:\ProgramFiles\CryptoPP\include(DEBUG和RELEASE均如此)
配置属性(Alt + F7)->链接器->常规->附加库目录,添加C:\ProgramFiles\CryptoPP\lib\debug(RELEASE下添加C:\Program Files\CryptoPP\lib\release)
这样新建的项目之中就可以使用Crypto++库了。
下面让我们完成第一个使用Crypto++库的程序。
让我们在VS2010中建立一个VisualC++的Win32控制台应用程序,完成上面所说的对项目的配置之后,开始写以下程序。(部分代码参考网络,地址已忘记,在此向原作者提出感谢!)
// aestest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <aes.h>#include <cryptopp/Hex.h> // StreamTransformationFilter#include <cryptopp/modes.h> // CFB_Mode#include <iostream> //std:cerr #include <sstream> //std::stringstream #include <string>using namespace std;using namespace CryptoPP;#pragma comment( lib, "cryptlib.lib" )std::string CFB_AESEncryptStr(std::string sKey, std::string sIV, const char *plainText){ std::string outstr; //填key SecByteBlock key(AES::MAX_KEYLENGTH); memset(key,0x30,key.size() ); sKey.size()<=AES::MAX_KEYLENGTH?memcpy(key,sKey.c_str(),sKey.size()):memcpy(key,sKey.c_str(),AES::MAX_KEYLENGTH); //填iv byte iv[AES::BLOCKSIZE]; memset(iv,0x30,AES::BLOCKSIZE); sIV.size()<=AES::BLOCKSIZE?memcpy(iv,sIV.c_str(),sIV.size()):memcpy(iv,sIV.c_str(),AES::BLOCKSIZE); AES::Encryption aesEncryption((byte *)key, AES::MAX_KEYLENGTH); CFB_Mode_ExternalCipher::Encryption cfbEncryption(aesEncryption, iv); StreamTransformationFilter cfbEncryptor(cfbEncryption, new HexEncoder(new StringSink(outstr))); cfbEncryptor.Put((byte *)plainText, strlen(plainText)); cfbEncryptor.MessageEnd(); return outstr; } std::string CFB_AESDecryptStr(std::string sKey, std::string sIV, const char *cipherText) { std::string outstr; //填key SecByteBlock key(AES::MAX_KEYLENGTH); memset(key,0x30,key.size() ); sKey.size()<=AES::MAX_KEYLENGTH?memcpy(key,sKey.c_str(),sKey.size()):memcpy(key,sKey.c_str(),AES::MAX_KEYLENGTH); //填iv byte iv[AES::BLOCKSIZE]; memset(iv,0x30,AES::BLOCKSIZE); sIV.size()<=AES::BLOCKSIZE?memcpy(iv,sIV.c_str(),sIV.size()):memcpy(iv,sIV.c_str(),AES::BLOCKSIZE); CFB_Mode<AES >::Decryption cfbDecryption((byte *)key, AES::MAX_KEYLENGTH, iv); HexDecoder decryptor(new StreamTransformationFilter(cfbDecryption, new StringSink(outstr))); decryptor.Put((byte *)cipherText, strlen(cipherText)); decryptor.MessageEnd(); return outstr; } int _tmain(int argc, _TCHAR* argv[]){string plainText = "Hello Crypto++! This is my first Crypto++ program.";string aesKey = "0123456789ABCDEF0123456789ABCDEF";//256bits, also can be 128 bits or 192bitsstring aesIV = "ABCDEF0123456789";//128 bitsstring cipherText,decryptedText;cipherText = CFB_AESEncryptStr(aesKey, aesIV, plainText.c_str());//加密¨¹decryptedText = CFB_AESDecryptStr(aesKey, aesIV, cipherText.c_str());//解密¨¹cout << "Crypto++ AES-256 CFB模式加密测试?"<< endl;cout << "加密用密钥:" <<aesKey << endl;cout << "密钥长度:" <<AES::MAX_KEYLENGTH*8 <<"bits" << endl;cout << "CFB模式所需的IV:" << aesIV << endl;cout << endl;cout << "原文:" << plainText << endl;cout << "密文:" << cipherText <<endl;cout << "恢复明文:" << decryptedText <<endl;getchar();return 0;}
以下是运行结果:
好了,到现在位置,我们已经完成了一个可以使用的AES-256 CFB模式加解密软件。
fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds解决方法
当我们在MFC程序中使用Crypto++的时候,如果按照Crypto++默认的方式编译出cryptlib.lib,当MFC开始编译的时候,就会提示类似以下的信息:
cryptlib.lib(randpool.obj) :error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,classstd::allocator<char> >::basic_string<char,structstd::char_traits<char>,class std::allocator<char> >(char const*)"(??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z)already defined in msvcprtd.lib(MSVCP80D.dll)
这种方式网上给出的解决方案是将项目的配置属性(Alt + F7)->C/C++->代码生成->运行库改为/MTd(DEBUG)或者/MT(RELEASE)。可是对于MFC程序,当这样改之后,就会报出以下错误:
fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds
想要解决这种局面,方法就是按本文上面所说的,将Crypto++每个项目的配置属性(Alt + F7)->C/C++->代码生成->运行库改为/MDd(DEBUG)或者/MD(RELEASE),再进行编译,获得cryptlib.lib,这样就可以在MFC中以/MDd(DEBUG)或者/MD(RELEASE)编译程序而不出问题。
- Crypto++ 入门(1) 安装
- Crypto++入门(0) - 安装
- Crypto++入门(0) - 安装
- Crypto++入门(1)-AES块加密
- Crypto++ 入门(0) 简介
- Crypto++ 入门(2) AES
- Crypto++入门
- Crypto++ 入门
- CRYPTO学习入门
- Crypto++简要入门
- CRYPTO学习入门
- Crypto++简要入门
- Crypto++ 入门 AES
- Crypto++入门学习笔记(DES、AES、RSA、SHA-256)
- Crypto++入门学习笔记(DES、AES、RSA、SHA-256)
- Crypto++入门学习笔记(DES、AES、RSA、SHA-256)
- Crypto++入门学习笔记(DES、AES、RSA、SHA-256)
- Crypto++入门学习笔记(DES、AES、RSA、SHA-256)
- 百度日志分析方法概述
- 回溯法解答110问题
- HDOJ_ACM_steps——Vowel Counting
- web service中文资料合集
- 为啥很多当代的硕士生最终找的工作技术含量这么低?
- Crypto++ 入门(1) 安装
- 1430.幸运数字
- 使用Weka进行数据挖掘
- 刚毕业的菜鸟,与其挤破头脑去大公司,还不如去小公司锻炼锻炼
- kindedtor的使用
- JSP分页
- Android下两次返回键完全退出程序以及提示对话框的实现
- 架构设计方法(一)入门
- Putty完美版(源码修改版)