用 cryptlib 库进行 hmac_sha256 hmac_sha1 hmac_md5 加密

仅供参考】cryptlib.lib cryptopp.lib 是自己从官网上下载源码,自己编译的。用户根据自己的需要,选择编译 Win32X64版本。其中cryptlib.lib文件区分DebugRelease版本。
编译的细节、坑这里不再细叙:因为我全忘了!
lib、dll全部编译好了以后,hmac_sha256hmac_sha1hmac_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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值