Crypto++是一个开源的C++加密算法库,它包括密码、消息认证码,单向散列函数,公钥密码机制,关键协议方案,缩小压缩等加密算法。
https://www.cryptopp.com/index.html
https://github.com/weidai11/cryptopp
https://sourceforge.net/projects/cryptopp/files/cryptopp/ -- 请下载5.6.5版本
https://www.cryptopp.com/wiki/HMAC,里面有SHA256算法的使用案例。
1、使用VS2015打开cryptest.sln工程文件,打开工程后可以看到四个项目,分别是
cryptdll,crypttest,cryptlib和dlltest。
2、修改MSVC Runtime Library -- 这个步骤很重要,否则将来库无法使用!
Crypto++库支持多线程,上述四个工程,默认的多线程运行时库都是静态版本的,即“MT”或“MTd”,我们需要将它们修改为“MD”或“MDd”。其中MD对应release版本,MDd对应debug版本。
VS2015主界面,解决方案,右键菜单,分别进入工程属性,配置属性,C/C++,代码生成,运行库。
如果是debug,就选择MDd;如果是release就选择MD。
3、我们F7编译,默认只编译cryptlib和crypttest这两个项目即可。编译cryptdll是会报错,暂时没去查它是为什么,也用不上它。 编译后,会生成一系列文件夹和文件,我们要的结果文件是“Win32->Output->debug和release的cryptlib.lib”。两个文件都很大,大几十MB。
4、整理结果文件
(1)新建文件夹include_crypto,把5.6.6源码文件夹所有的.h文件拷贝进入
(2)新建文件夹lib_crypto,把5.6.6源码编译结果debug和release的.lib文件分别拷入
5、新建test测试工程,验证。记得附加包含目录../include_crypto
// cryptotest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
#include
#include
#include
using namespace CryptoPP;
#include
#include
#ifdef _DEBUG
#pragma comment(lib,"../lib_crypto/debug/cryptlib.lib")
#else
#pragma comment(lib,"../lib_crypto/release/cryptlib.lib")
#endif
int main(int argc, char* argv[])
{
const byte m[] = {
0x5,0x8,0xC,0xE,0x1,0xE,0x6,0x0,0x1,0x1,
0x1,0x1,0x1,0x1,0x1,0x1,0x6,0x4,0x6,0x1,
0x7,0x4,0x6,0x1,0x0,0x0,0x0,0x0
};
const byte k[] = {
0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,
0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,
0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,
0x1,0x1
};
HexEncoder hex(new FileSink(std::cout));
HMAC hmac(k, sizeof(k));
hmac.Update(m, sizeof(m));
byte d[HMAC::DIGESTSIZE];
hmac.Final(d);
std::cout << "Message: ";
hex.Put(m, sizeof(m));
hex.MessageEnd();
std::cout << std::endl;
std::cout << "Digest: ";
hex.Put(d, sizeof(d));
hex.MessageEnd();
std::cout << std::endl;
return 0;
}
完整的工程源码和5.6.6编译完成的库文件下载:
https://download.csdn.net/download/libaineu2004/10319974
---
参考文章
https://blog.csdn.net/sagittarius_warrior/article/details/53408803
https://blog.csdn.net/sagittarius_warrior/article/details/53405217