【仅供参考】cryptlib.lib cryptopp.lib 是自己从官网上下载源码,自己编译的。用户根据自己的需要,选择编译 Win32、X64版本。其中cryptlib.lib文件区分Debug、Release版本。
编译的细节、坑这里不再细叙:因为我全忘了!
lib、dll全部编译好了以后,hmac_sha256、hmac_sha1、hmac_md5 加密代码就非常简单了。
#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1
#include "crypt\hmac.h"
#include "crypt\sha.h"
#include "crypt\md5.h"
#include "crypt\filters.h"
#include "crypt\hex.h"
#ifdef _DEBUG
#pragma comment(lib,"libs\\cryptlib_d.lib")
#else
#pragma comment(lib,"libs\\cryptlib.lib")
#endif
#pragma comment(lib,"libs\\cryptopp.lib")
/************************************************************************/
/*说明:32字节
/************************************************************************/
string Hmac_Sha256(byte* pKey, size_t nLenKey, byte* pData, size_t nLenData)
{
string stdDigest;
CryptoPP::HMAC<CryptoPP::SHA256> hmac(pKey, nLenKey);
byte digest[CryptoPP::SHA256::DIGESTSIZE];
hmac.Update(pData, nLenData);
hmac.Final(digest);
for (int i = 0; i < CryptoPP::SHA256::DIGESTSIZE; ++i)
stdDigest += (char)(digest[i]);
return stdDigest;
}
/************************************************************************/
/*说明:20字节
/************************************************************************/
string Hmac_Sha1(byte* pKey, size_t nLenKey, byte* pData, size_t nLenData)
{
string stdDigest;
CryptoPP::HMAC<CryptoPP::SHA1> hmac(pKey, nLenKey);
byte digest[CryptoPP::SHA1::DIGESTSIZE];
hmac.Update(pData, nLenData);
hmac.Final(digest);
for (int i = 0; i < CryptoPP::SHA1::DIGESTSIZE; ++i)
stdDigest += (char)(digest[i]);
return stdDigest;
}
/************************************************************************/
/*说明:16字节
/************************************************************************/
string Hmac_MD5(byte* pKey, size_t nLenKey, byte* pData, size_t nLenData)
{
string stdDigest = "";
CryptoPP::HMAC<CryptoPP::Weak::MD5> hmac(pKey, nLenKey);
CryptoPP::byte digest[CryptoPP::Weak::MD5::DIGESTSIZE]; //输出 HMAC-MD5 结果的缓冲区
hmac.Update(pData, nLenData);
hmac.Final(digest);
for (int i = 0; i < CryptoPP::Weak::MD5::DIGESTSIZE; ++i)
stdDigest += (char)(digest[i]);
return stdDigest;
}