【仅供参考】下载一个合适的 openssl 版本,其中 .lib、.dll、.h文件最好完全匹配
本人项目中使用,没问题!如果有问题,请自行解决!
openssl库里面,是不是也用到了 cryptolib 库的代码???
#include "openssl\hmac.h"
#pragma comment(lib,"libs\\libcrypto.lib")
/************************************************************************/
/*说明:32字节
/************************************************************************/
string XuHmac::Hmac_Sha256(byte* pKey, size_t nLenKey, byte* pData, size_t nLenData)
{
string stdDigest = "";
HMAC_CTX* pHmac_ctx = HMAC_CTX_new();
HMAC_Init_ex(pHmac_ctx, pKey, nLenKey, EVP_sha256(), NULL);
HMAC_Update(pHmac_ctx, pData, nLenData);
unsigned char szDigest[EVP_MAX_MD_SIZE];
unsigned int nLenDigest = 0;
HMAC_Final(pHmac_ctx, szDigest, &nLenDigest);
for (unsigned int i = 0; i < nLenDigest; ++i)
stdDigest += (char)(szDigest[i]);
HMAC_CTX_free(pHmac_ctx);
return stdDigest;
}
/************************************************************************/
/*说明:20字节
/************************************************************************/
string XuHmac::Hmac_Sha1(byte* pKey, size_t nLenKey, byte* pData, size_t nLenData)
{
string stdDigest = "";
HMAC_CTX* pHmac_ctx = HMAC_CTX_new();
HMAC_Init_ex(pHmac_ctx, pKey, nLenKey, EVP_sha1(), NULL);
HMAC_Update(pHmac_ctx, pData, nLenData);
unsigned char szDigest[EVP_MAX_MD_SIZE];
unsigned int nLenDigest = 0;
HMAC_Final(pHmac_ctx, szDigest, &nLenDigest);
for (unsigned int i = 0; i < nLenDigest; ++i)
stdDigest += (char)(szDigest[i]);
HMAC_CTX_free(pHmac_ctx);
return stdDigest;
}
/************************************************************************/
/*说明:16字节
/************************************************************************/
string XuHmac::Hmac_MD5(byte* pKey, size_t nLenKey, byte* pData, size_t nLenData)
{
string stdDigest = "";
HMAC_CTX* pHmac_ctx = HMAC_CTX_new();
HMAC_Init_ex(pHmac_ctx, pKey, nLenKey, EVP_md5(), NULL);
HMAC_Update(pHmac_ctx, pData, nLenData);
unsigned char szDigest[EVP_MAX_MD_SIZE];
unsigned int nLenDigest = 0;
HMAC_Final(pHmac_ctx, szDigest, &nLenDigest);
for (unsigned int i = 0; i < nLenDigest; ++i)
stdDigest += (char)(szDigest[i]);
HMAC_CTX_free(pHmac_ctx);
return stdDigest;
}