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 <cryptlib.h> #include <files.h> #include <hex.h> #include <sha.h> #include <hmac.h> using namespace CryptoPP; #include <string> #include <iostream> #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<SHA1> hmac(k, sizeof(k)); hmac.Update(m, sizeof(m)); byte d[HMAC<SHA1>::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