近期項目中HTTPS通訊中,token需要使用HMAC-MD5算法生成,往上找了一些資料后,仍不能滿足自身需求,故次一記。
前期準備:
①下載Cryptopp庫(我下載的是8.8.0 Release版本):Crypto++ Library 8.9 | Free C++ Class Library of Cryptographic Schemes
②進行編譯,根據自身情況進行VS環境配置
將cryptdll、cryptlib編譯后分別按文件夾分類保存
【lib:cryptlib.lib、cryptopp.lib】【dll:cryptopp.dll】
也可以直接下載我編譯好的:
HMAC-SHA256算法實現:
#include <iostream>
#include <string>
#include <cryptopp/hmac.h>
#include <cryptopp/sha.h>
int main()
{std::string key = "mysecretkey";std::string data = "Hello, HMAC!";CryptoPP::HMAC<CryptoPP::SHA256> hmac((const byte*)key.data(), key.size());byte digest[CryptoPP::SHA256::DIGESTSIZE];hmac.Update((const byte*)data.data(), data.size());hmac.Final(digest);std::cout << "HMAC-SHA256: ";for (int i = 0; i < CryptoPP::SHA256::DIGESTSIZE; i++) {printf("%02x", digest[i]);}std::cout << std::endl;return 0;
}
MD5算法實現:
std::string crypto::md5(std::string text)
{std::string digest;CryptoPP::Weak1::MD5 md5;CryptoPP::HashFilter hashfilter(md5);hashfilter.Attach(new CryptoPP::HexEncoder(new CryptoPP::StringSink(digest), false));hashfilter.Put(reinterpret_cast<const unsigned char*>(text.c_str()), text.length());hashfilter.MessageEnd();return digest;
}
HMAC-MD5算法實現:
#include "hmac.h"
#include "md5.h"{QJsonObject json;json["key"] = "1234567890";QJsonDocument document;document.setObject(json);QByteArray ba = document.toJson(QJsonDocument::Compact);//Indented : Compactstd::string key = "apple";std::string body = ba.data();CryptoPP::HMAC<CryptoPP::Weak1::MD5> hmac((const CryptoPP::byte*)key.data(), key.size());CryptoPP::byte digest[CryptoPP::Weak1::MD5::DIGESTSIZE];hmac.Update((const CryptoPP::byte*)body.data(), body.size());hmac.Final(digest);std::cout << "HMAC-MD5: ";for (int i = 0; i < CryptoPP::Weak1::MD5::DIGESTSIZE; i++) {printf("%02x", digest[i]);}std::cout << std::endl;
}