Qt使用Cryptopp生成HMAC-MD5

近期項目中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;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208716.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208716.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208716.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux: glibc: net/if.h vs linux/if.h

最近看到一段代碼改動,用net/if.h替換了linux/if.h。仔細看了看這兩個的區別: https://stackoverflow.com/questions/20082433/what-is-the-difference-between-linux-if-h-and-net-if-h 從網上搜了一下看到如下的一個編譯錯誤,如果同時使用這兩個if.h文件,需要將net/if.h…

注意力機制添加方法

要將注意力機制模塊添加到YoloV5工程項目中的yolo.py中&#xff0c;可參考以下四種情況。 以下4個elif代碼來自https://yolov5.blog.csdn.net/article/details/129108082 elif m in [SimAM, ECA, SpatialGroupEnhance,TripletAttention]:args [*args[:]]elif m in [CoordAtt…

【1day】致遠系統A6版本operaFileActionController.jsp接口任意文件讀取漏洞學習

注:該文章來自作者日常學習筆記,請勿利用文章內的相關技術從事非法測試,如因此產生的一切不良后果與作者無關。 目錄 一、漏洞描述 二、影響版本 三、資產測繪 四、漏洞復現

基于ResNet模型的908種超大規模中草藥圖像識別系統

中草藥藥材圖像識別相關的實踐在前文中已有對應的實踐了&#xff0c;感興趣的話可以自行移步閱讀即可&#xff1a; 《python基于輕量級GhostNet模型開發構建23種常見中草藥圖像識別系統》 《基于輕量級MnasNet模型開發構建40種常見中草藥圖像識別系統》 在上一篇文章中&…

RocketMQ-RocketMQ高性能核心原理(流程圖)

1.NamesrvStartup 2.BrokerStartup 3. DefualtMQProducer 4.DefaultMQPushConsumer

maven工程的pom.xml文件中增加了依賴,但偶爾沒有下載到本地倉庫

maven工程pom.xml文件中的個別依賴沒有下載到本地maven倉庫。以前沒有遇到這種情況&#xff0c;今天就遇到了這個問題&#xff0c;把解決過程記錄下來。 我在eclipse中編輯maven工程的pom.xml文件&#xff0c;增加對mybatis的依賴&#xff0c;但保存文件后&#xff0c;依賴的j…

Java--1v1雙向通信-控制臺版

文章目錄 前言客戶端服務器端輸出線程端End 前言 TCP&#xff08;Transmission Control Protocol&#xff09;是一種面向連接的、可靠的網絡傳輸協議&#xff0c;它提供了端到端的數據傳輸和可靠性保證。 本程序就是基于tcp協議編寫而成的。 利用 TCP 協議進行通信的兩個應用…

HarmonyOS(鴻蒙操作系統)與Android系統 各自特點 架構對比 各自優勢

綜合對比 HarmonyOS&#xff08;鴻蒙操作系統&#xff09;是由華為開發的操作系統&#xff0c;旨在跨多種設備和平臺使用。HarmonyOS的架構與谷歌開發的廣泛使用的Android操作系統有顯著不同。以下是兩者之間的一些主要比較點&#xff1a; 設計理念和使用案例&#xff1a; Harm…

go語言 grpc 攔截器

文章目錄 攔截器服務端攔截器一元攔截器流攔截器 客戶端攔截器一元攔截器流攔截 多個攔截器 代碼倉庫 攔截器 gRPC攔截器&#xff08;interceptor&#xff09;是一種函數&#xff0c;它可以在gRPC調用之前和之后執行一些邏輯&#xff0c;例如認證、授權、日志記錄、監控和統計…

iOS app切換后臺時添加模糊遮罩層

仿 支付寶 退出后臺后,App整個 增加模糊遮罩層 此處只介紹 在iOS13后 SceneDelegate 下的操作 原理就是 在 App 進入后臺后 在 主window上添加一個 UIVisualEffectView 在進入前臺后移除 直接上代碼: 先聲明: //先聲明 /* blurView */ property (strong, nonatomic) UI…

逆波蘭表達式求解計算器

利用逆波蘭表達式求解計算器有以下幾個步驟: 1. 去掉字符串中的空格 s s.replaceAll(" ", "")2. 講字符串轉換為中序表達式數組 def string_to_infixlist(s):ans []keep_num ""for i in range(len(s)):if s[i].isdigit():if i < len(s)…

docker學習(四、修改容器創建新的鏡像推送到云上)

鏡像是只讀的&#xff0c;容器是可編輯的。Docker鏡像是分層的&#xff0c;支持通過擴展鏡像&#xff0c;創建新的鏡像。 學到這里感覺docker跟git很想~~ 通過docker commit將修改的容器做成新的鏡像 # 將容器做成新的鏡像 docker commit -m"提交備注" -a"作…

【1day】泛微e-office OA系統sms_page.php接口SQL 注入漏洞學習

注:該文章來自作者日常學習筆記,請勿利用文章內的相關技術從事非法測試,如因此產生的一切不良后果與作者無關。 目錄 一、漏洞描述 二、影響版本 三、資產測繪 四、漏洞復現

大創項目推薦 交通目標檢測-行人車輛檢測流量計數 - 大創項目推薦

文章目錄 0 前言1\. 目標檢測概況1.1 什么是目標檢測&#xff1f;1.2 發展階段 2\. 行人檢測2.1 行人檢測簡介2.2 行人檢測技術難點2.3 行人檢測實現效果2.4 關鍵代碼-訓練過程 最后 0 前言 &#x1f525; 優質競賽項目系列&#xff0c;今天要分享的是 &#x1f6a9; 畢業設計…

什么是Nginx反向代理?Nginx反向代理配置指南

Nginx反向代理是一種常見的服務器架構模式&#xff0c;它可以將客戶端請求轉發到多個后端服務器上&#xff0c;從而實現負載均衡、高可用性和安全性。本文將介紹Nginx反向代理的基本概念和配置方法。 什么是Nginx反向代理&#xff1f; 在傳統的Web服務器架構中&#xff0c;客戶…

解決selenium使用.get()報錯:unknown error: unsupported protocol

解決方法 將原來的&#xff1a; url "https://www.baidu.com" browser.get(url)替換為&#xff1a; url "https://www.baidu.com" browser.execute_script(f"window.location.replace({url});") # 直接平替 .get()問題解析 之前運行都是正…

【后端學前端學習記錄】學習計劃

1、個人背景 寫了足夠久的后端了&#xff0c;常用的語言基本上都接觸過&#xff0c;沒有在工作中寫過前端 一直想做一些前端的工作&#xff0c;但是前端技能不足加上自己審美不行&#xff0c;寫出的界面總是很丑 所以一直對前端做不好&#xff0c;也沒有真正下手。 2、動機 種…

Navicat 技術指引 | 連接 GaussDB 分布式

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式數據庫。GaussDB 分布式模式更適合對系統可用性和數據處理能力要求較高的場景。Navicat 工具不僅提供可視化數據查看和編輯功能&#xff0c;還提供強大的高階功能&#xff08;如模型、結…

SLAM ORB-SLAM2(11)單目初始化

SLAM ORB-SLAM2(11)單目初始化 1. 初始化工作1.1. 單應矩陣(Homography Matrix)1.2. 基礎矩陣(Fundamental Matrix)1.3. 本質矩陣(Essential Matrix)1.4. 初始化過程2. 業務流程2.1. 創建單目初始化器2.2. 判斷連續幀的特征點數目2.3. 在兩幀中找匹配的特征點對2.4. 估…

軟件兼容性測試:保障多樣化用戶體驗的重要功能

隨著移動設備和操作系統的快速發展&#xff0c;軟件兼容性測試變得越發重要。這項測試確保軟件在不同平臺、設備和環境下都能夠正常運行&#xff0c;提供一致而穩定的用戶體驗。下面是軟件兼容性測試中的一些關鍵功能&#xff1a; 1. 跨平臺兼容性測試 在不同操作系統上運行的軟…