crypto++环境搭建

DinS          Written on 2017/11/22

一、概述

加密解密是传递信息过程中必然会涉及到的环节。通常而言加密解密算法非常专业,一般程序员不会也不需要深入了解。另外加密解密也往往不是程序的核心,因此选择合适的库进行加密解密是理想选择。

本专题将介绍Crypto++库。为什么选择Crypto++呢?
这是免费开源的,使用起来比较方便,各大c++编译器都支持,另外收录的算法非常多,可以满足需求。其pipelining模式可以大大简化代码,使用起来非常方便。

本专题将介绍最核心的、最实用的内容,至于其他内容读者可以参考官网wiki:https://www.cryptopp.com/wiki/,本专题的大部分内容也是从这里总结归纳出来的。

二、环境配置

1.去官网上下载库,放到某个目录下:

这里使用的是5.65版本,新版本同理。

2.解压出来是一堆源文件、工程文件和测试文件夹,根据自己的开发环境找到适合的工程,这里以VS为例:

打开cryptest.sln,原工程是用VS2010写的,打开后要升级:

进行升级,结束后看到解决方案。

3.编译库文件
找到cryptlib,右键->生成:

编译结束后看到如下输出:

lib文件已经生成。
注意这里生成的是debug版Win32,如果需要release版修改编译配置。64位也同理。

注意:这里有一个坑。
这里的cryptlib项目属性中默认有一个设置是这样的:

运行时库不管debug还是release都是多线程(MT),然而默认使用VS建立的工程都是多线程DLL(MD)。
二者区别是什么?
区别是动态链接还是静态链接C运行时库(C runtime Library, CRT)。如果是动态链接(MD/MDd),你的程序就依赖C运行时的动态链接库(比如VS2010的msvr100.dll),当你的程序在其他没有这个dll的电脑上运行就会出现错误(找不到这个dll)。如果是静态链接(MT/MTD),C运行库直接链接到你的程序里,你的程序就不依赖C运行时库的dll了。
微软是推荐是用动态链接的,因为这种链接方式可以减少可执行文件的大小、可以减少内存的使用、避免链接问题。但是也有使用MT的理由,这样做可以确保程序放到任何机器上都可以运行。

先不说推荐的事,一旦采用了某个类型的运行时库生成lib,则调用该lib的程序也需要使用对用的库。换句话说,如果这里不做修改直接生成,则以后调用crypto++的程序都必须设置为多线程(MT/MTD)。至于选择哪个读者自行决定。

本专题示例使用的是MT,会看到出错的情况。

4.新建一个工程作为自己的项目
在工程目录下新建两个文件夹:

将刚刚生成的两个lib拷贝到lib文件夹下。

把debug版重命名,后面加个D。

接下来回到刚刚Crypto++工程的目录,把所有头文件放到新工程include下。
源代码比较混乱,可以按类型分类。

拷贝过去到include文件夹下:

读者应该明白我们为什么要这么做,如果不明白看《静态库(lib)》。

5.打开我们的工程,设置属性

附加包含目录填入我们的include文件夹,这样工程可以找到对应的头文件

附加库目录设置,以便导入crypto++库

附加依赖项填入库的名称,注意debug版和release版区别。如果工程是debug版就用debug版库,release同理

至此环境搭建完成。

下面让我们进入crypto++的用法,见《crypto++框架介绍》。