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 : Compact

    std::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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/240895.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

搬运机器人行业分析:中国市场销量已达到6.3万台左右

近年来&#xff0c;随着我国人口红利的逐渐消失&#xff0c;企业用工成本不断上涨&#xff0c;各种工业机器人获得了广泛的应用。焊接、装配、切割、分拣、搬运等机器人的出现&#xff0c;不仅通过“机器换人”解放了企业和行业的生产力&#xff0c;更推动了产业发展由劳动密集…

2012r2无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll。测试成功,完美解决。

2012r2修复api-ms-win-crt-runtime-l1-1-0.dll资源-CSDN文库csdn的下载地址 若要开始下载&#xff0c;请单击“下载”按钮&#xff0c;然后执行以下操作之一&#xff0c;或者从“更改语言”中选择另一种语言&#xff0c;然后单击“更改”。 单击“运行”立即开始安装。单击“保…

[C++] 继承

文章目录 1、继承的概念及定义1.1 继承的概念1.2 继承的定义1.2.1 定义格式1.2.2 继承关系和访问限定符1.2.3 继承基类成员访问方式的变化 2、基类和派生类对象赋值转换3、继承中的作用域4、派生类的默认成员函数5、继承与友元6、继承与静态成员7、菱形继承&#xff0c;菱形虚拟…

Qt提升绘制效率,绘制加速。

在我们绘制一些复杂逻辑且数据量巨大的图形时&#xff0c;经常会出现流畅性问题&#xff0c;本文就是来进行讲解如何提升绘制效率的。 实现思路&#xff1a; 场景1&#xff1a;我们绘制多个静态图形和绘制一张图片哪个更快。很明显绘制多个图形的时候要慢很多。所以我们将多个图…

K8S(一)—安装部署

目录 安装部署前提以下的操作指导(在master)之前都是三台机器都需要执行 安装docker服务下面的操作仅在k8smaster执行 安装部署 前提 以下的操作指导(在master)之前都是三台机器都需要执行 关闭防火墙 [rootk8smaster ~]# vim /etc/selinux/config [rootk8smaster ~]# swa…

深入源码解析ArrayList:探秘Java动态数组的机制与性能

文章目录 一、 简介ArrayList1.1 介绍ArrayList的基本概念和作用1.2 与数组的区别和优势 二、 内部实现2.1 数据结构&#xff1a;动态数组2.2 添加元素&#xff1a;add()方法的实现原理2.3 扩容机制&#xff1a;ensureCapacity()方法的实现原理 三、 常见操作分析3.1 获取元素&…

Postswigger 靶场 XSS 通关

文章目录 PostSwigger靶场XSS通关学徒&#xff1a;第一关学徒&#xff1a;第二关学徒&#xff1a;第三关学徒&#xff1a;第四关学徒&#xff1a;第五关学徒&#xff1a;第六关学徒&#xff1a;第七关学徒&#xff1a;第八关学徒&#xff1a;第九关 PostSwigger靶场XSS通关 靶…

2023_Spark_实验二十六:编写Shell模拟生成点击实时数据

引言&#xff1a;流式数据处理主要处理实时数据&#xff0c;由于实验教学过程中&#xff0c;每个同学无法拿到实时数据&#xff0c;因此我们开发shell脚本模拟实时数据生成&#xff0c;支持后续实验。 实验目的&#xff1a;通过开发模拟实时点击流shell脚本&#xff0c;模拟实时…

<JavaEE> 经典设计模式之 -- 线程池

目录 一、线程池的概念 二、Java 标准库中的线程池类 2.1 ThreadPoolExecutor 类 2.1.1 corePoolSize 和 maximumPoolSize 2.1.2 keepAliveTime 和 unit 2.1.3 workQueue 2.1.4 threadFactory 2.1.5 handler 2.1.6 创建一个参数自定义的线程池 2.2 Executors 类 2.3…

java答题小程序源码带后台

尊敬的客户大家好&#xff01;接下来由我来介绍一下晟讯答题小程序&#xff0c;晟讯答题小程序是一款专业性的答题小程序&#xff0c;技术方式为前端原生开发的小程序&#xff0c;服务端为java程序&#xff0c;且拥有独立知识产权&#xff0c;软著登字2019SR0657453。其功能集个…

全球化表达:TikTok在文化交流中的崭露头角

TikTok&#xff0c;这一短视频平台自问世以来&#xff0c;迅速蔓延至全球&#xff0c;成为年轻一代创意表达的热门平台。其简便易用的特性和多元创作方式使得TikTok在全球范围内崭露头角。本文将深入探讨TikTok在文化交流中的作用&#xff0c;以及它在全球化表达方面的独特之处…

解决RuntimeError: CUDA error: invalid device ordinal

步骤 首先查看自己设备的cuda版本 #如下linux指令都可以&#xff0c;主要还是以nvidia-smi为主 nvidia-smi nvcc -V用的python版本是3.8 torch版本用的1.12.1cu113 torch网址&#xff1a;https://pytorch.org/get-started/previous-versions/ 安装完后发现出现如下问题&#…

蓝桥杯小白赛第一场(1~6)(期望DP)

1、模拟 2、贪心 3、前缀和 4、猜结论 5、双指针 6、期望DP 1. 蘑菇炸弹 思路&#xff1a;一个简单的暴力模拟。 #include <bits/stdc.h> using namespace std; int main() {int n;cin >> n;vector<int>a(n , 0);for(int i 0 ; i < n ; i )cin &…

深度学习中的各类评价指标

深度学习中的各类评价指标 1 Dice Loss2 Precision&#xff08;精度&#xff09;3 Recall&#xff08;召回率&#xff09;4 F-Score5 mAP 1 Dice Loss Dice Loss&#xff0c;也叫Soft Dice Coefficient&#xff0c;是一种用于图像分割任务的损失函数。它基于目标分割图像与模型…

分库分表,可能真的要退出历史舞台了!

即使是不懂编程的玩家&#xff0c;在对比 NAS 的时候&#xff0c;也会两眼放光&#xff0c;考虑很多因素&#xff0c;比如 RAID 级别、速度、易用程度等。作为时时刻刻与代码打交道的我们&#xff0c;更需要关注数据的存取问题。 一开始&#xff0c;开箱即用的 MySQL&#xff0…

AI一键生成增删改查代码

AI一键生成增删改查代码 在线体验&#xff1a;体验地址 使用教程 1. 描述需求 准确清晰的描述你的需求&#xff0c;如&#xff1a;基于RBAC模型的权限管理系统&#xff0c;点击AI图标 2. AI生成SQL语句 AI将根据你的需求描述生成SQL语句 CREATE TABLE users (id INT A…

高危性行为感染HPV几率有多大?谭巍主任阐述三大要点

高危性行为是指与多个性伴侣发生性行为&#xff0c;或者与性伴侣发生无保护措施的性行为。这些行为增加了感染性传播疾病的风险&#xff0c;包括人乳头瘤病毒(HPV)。 一、HPV感染的风险 1. 性伴侣数量&#xff1a;性伴侣数量越多&#xff0c;感染HPV的几率就越高。与多个性伴…

2023年AMC8数学竞赛真题的典型考点和解析

现在距离2024年1月19日的AMC8数学竞赛还有一个多月的时间&#xff0c;最后一个多月的时间&#xff0c;六分成长建议在前期知识点和内容体系都比较熟悉的基础上&#xff0c;以刷真题为主。同时通过刷真题的查漏补缺&#xff0c;补齐短板。 如何提高刷真题的效率呢&#xff1f;当…

数据结构之----二叉树、二叉树遍历、二叉树数组表示、二叉搜索树

数据结构之----二叉树、二叉树遍历、二叉树数组表示、二叉搜索树 什么是二叉树&#xff1f; 二叉树是一种非线性数据结构&#xff0c;代表着祖先与后代之间的派生关系&#xff0c;体现着“一分为二”的分治逻辑。 与链表类似&#xff0c;二叉树的基本单元是节点&#xff0c;每…

软件测试基础知识总结(超详细整理)

基础篇 1. 什么是软件测试&#xff1f; 软件测试&#xff08;Software Testing&#xff09;的经典定义是&#xff1a;在规定的条件下对程序进行操作&#xff0c;以发现程序错误&#xff0c;衡量软件质量&#xff0c;并对其是否能满足设计要求进行评估的过程。简单来讲就是&am…