visual studio c++ 2015 Crypto++ 下载、编译和部署

来源:互联网 发布:王者荣耀数据封神榜 编辑:程序博客网 时间:2024/06/16 01:29

Crypto++是一个开源的C++加密算法库,它包括密码、消息认证码,单向散列函数,公钥密码机制,关键协议方案,缩小压缩等加密算法。本文将介绍Crypto++库从下载到项目应用的基本步骤。(本人目前的项目需要的是AES文件加密算法,其他的留待以后探索)

一、下载

1,登陆官网:https://www.cryptopp.com/

2,点击“Download”,将显示如下的下载列表



    我选择的是“5.6.5 Release”。

二、编译

1,将下载的压缩文件解压后,找到“*.sln”文件。

    Crypto++是一个跨平台的库,支持“MSVC6.0 - VS2015”、“GCC3.2 - 7”等C++编译器。我主要用于Win7 X86平台,选择用VS2015进行编译。

2,直接用VS2015打开“*.sln”文件,它会提示“升级VC++编译器和库”,确认即可。

    升级完毕,在VS的解决方案资源管理器中,可以看到该solution下有四个工程,分别是:cryptdll、crypttest、cryptlib和dlltest。其中,crypttest需要依赖cryptlib,而dlltest则是对cryptdll的测试工程。

3,修改MSVC Runtime Library

    Crypto++库支持多线程,上述四个工程,默认的多线程运行时库都是静态版本的,即“MT”或“MTd”,我们需要将它们修改为“MD”或“MDd”。

    为什么要这么修改,可以参看我的另一篇博文:http://blog.csdn.NET/sagittarius_warrior/article/details/53405217

4)编译

    可以对每个工程进行单独编译,也可以对整个solution进行编译(选择菜单栏上的“build”)。我选择的是编译整个solution,因为单工程编译时,编译cryptdll是会报错,暂时没去查它是为什么。

    编译后,会生成一系列文件夹和文件,“Win32->Output->cryptlib.lib”,这个文件就是生成的库文件。事实上,这中方式仅仅只编译了cryptlib和crypttest。


三、部署

    从上面的编译可知,Crypto++库有两种发布方式:一种是DLL(动态链接库),一种是Lib(静态链接库)。我在此先尝试Lib方式,后面有时间再探索DLL方式。下面,我将以一个win32Console工程为例,讲解如何部署Crypto++库。


1,新建Win32 Console工程

    直接用VS2015新建一个名为“AES”的Win32 Console工程,默认即可。

2,拷贝头文件

    Lib方式发布Crypto++库需要在目标工程下包含Crypto++源码文件夹下所有的头文件。事实上,这些头文件还是挺多的,有145个。为了方便管理,我新建一个“Include”文件夹,并编写一个bat脚本来将这些头文件拷贝到“Include”文件夹内。bat源码如下:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. echo start copy  
  2. mkdir Include  
  3. copy *.h Include  
  4. echo end copy  
  5. pause  

    将这个Include文件夹放到目标工程源码目录下,并设置它为包含目录。

3,拷贝lib文件

    在目标工程源码目录下,新建一个“Library”文件夹,将“cryptlib.lib”拷贝进去,并将该文件夹设为“链接器->附加依赖库目录”。


4,链接库文件

    在此,我选择用“#pragma comment(lib,"cryptlib.lib")”预编译指令将它链接进去。也可以在工程文件中显示设置链接库。

5,包含对应的头文件和应用命令空间。

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include "aes.h"  
  2. #pragma comment(lib,"cryptlib.lib")  
  3. using namespace CrytoPP;  

    关于头文件,你需要用到那个算法,你就包含哪个头文件。比如,我这里只用到AES,我就只包含AES的头文件。


四、测试demo

    参考链接:

    ECB模式:http://www.cnblogs.com/lit10050528/p/4081658.html

    CBC模式(C):http://www.mincoder.com/article/3994.shtml

    CBC模式(C++)https://my.oschina.Net/u/566591/blog/168421

    Multi-Modes :http://blog.poxiao.me/p/advanced-encryption-standard-and-block-cipher-mode/

原创粉丝点击