10、Qt:对数据进行加密、解密

一、说明

在Qt项目中简单的对数据进行加密解密,有如下两种方式
1、QCryptographicHash
Qt提供了用于加密的类QCryptographicHash,但是QCryptographicHash类只有加密功能,没有解密功能
2、Qt-AES
使用第三方AES库,对数据进行加密解密

二、使用QCryptographicHash

新建一个Qt项目,基类选择QMainWindow,

在界面上拖拽如下两个控件,并进行布局

更改.h代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
更改.cpp代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QCryptographicHash>
#include <QDebug>MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{QByteArray array;array.append(ui->lineEdit->text());QCryptographicHash hash(QCryptographicHash::Md5); //Md5加密hash.addData(array); //添加数据QByteArray retArray = hash.result(); //加密后的数据qDebug() << retArray.toHex(); //转化成16进制
}
运行,随意输入一下数据,如:123abc,点击pushButton

三、使用Qt-AES

访问下面的链接,下载Qt-AES相关文件
https://github.com/bricke/Qt-AES

创建一个Qt项目,基类选择“QMainWindow”,把qaesencryption.h和qaesencryption.cpp两个文件添加到项目中

更改.h代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QCryptographicHash>
#include <QDebug>
#include "qaesencryption.h"namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:QString encodedText(QString data, QString key); //加密QString decodedText(QString data, QString key); //解密private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
更改.cpp代码
#include "MainWindow.h"
#include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{ui->setupUi(this);QString data = "qwer123456"; //要加密的数据QString key = "9876543"; //密钥QString encoded = encodedText(data, key); //加密QString decoded = decodedText(encoded, key); //解密·qDebug() << "源数据:" << data;qDebug() << "加密:" << encoded;qDebug() << "解密:" << decoded;
}MainWindow::~MainWindow()
{delete ui;
}//使用AES对数据进行加    密
QString MainWindow::encodedText(QString data, QString key)
{//密钥长度AES_128,加密方式ECB,填充方式ZEROQAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB,                 QAESEncryption::ZERO);//使用QCryptographicHash对密钥进行加密QByteArray hashKey = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Sha1);//对源数据加密QByteArray encodedText = encryption.encode(data.toUtf8(), hashKey);//QByteArray转QString (toBase64()不能去掉)QString encodeTextStr = QString::fromLatin1(encodedText.toBase64());//qDebug()<< "encodedText:"<< encodeTextStr;return encodeTextStr;
}//使用AES对数据进行解密
QString MainWindow::decodedText(QString data, QString key)
{//密钥长度AES_128,加密方式ECB,填充方式ZEROQAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB,     QAESEncryption::ZERO);//使用QCryptographicHash对密钥进行加密QByteArray hashKey = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Sha1);//解密QByteArray decodedText = encryption.decode(QByteArray::fromBase64(data.toLatin1()), hashKey);//QByteArray转QStringQString decodedTextStr = QString::fromLatin1(decodedText);//qDebug()<<"decodedText:"<< decodedTextStr;return decodedTextStr;
}
运行测试

不加fromBase64、toBase64时

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【动态规划】08路径问题_下降路径最小和_C++(medium)

题目链接&#xff1a;leetcode下降路径最小和 目录 题目解析&#xff1a; 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析&#xff1a; 题目让我们求通过 matrix 的下降路径 的 最小和 由题可得&#xff1a; 在下一行选择的元…

用户管理第2节课-idea 2023.2 后端--删除表,从零开始

一、鱼皮清空model文件夹下 二、鱼皮清空mapper文件夹下 三、删除 test 测试类下的部分代码 3.1删除SampleTest 3.2删除部分代码 UserCenterApplicationTests

Android ViewModel的简单应用

Android ViewModel 是一种设计模式&#xff0c;用于在应用程序组件之间存储和管理UI相关的数据。下面是使用Android ViewModel的基本步骤&#xff1a; 添加 ViewModel 依赖&#xff1a;在项目的 build.gradle 文件中添加以下依赖&#xff1a; implementation "androidx.…

【SQL】根据年份,查询每个月的数据量

根据年份&#xff0c;查询每个月的数据量 一种 WITH Months AS (SELECT 1 AS Month UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION…

计算型服务器和通用型服务器的区别_Maizyun

计算型服务器和通用型服务器的区别 随着云计算技术的不断发展&#xff0c;服务器作为云计算的核心基础设施&#xff0c;其类型和功能也在不断丰富。其中&#xff0c;计算型服务器和通用型服务器是两种常见的服务器类型。本文将详细介绍这两种服务器之间的区别。 一、计算型服…

B : DS二叉排序树之创建和插入

Description 给出一个数据序列&#xff0c;建立二叉排序树&#xff0c;并实现插入功能 对二叉排序树进行中序遍历&#xff0c;可以得到有序的数据序列 Input 第一行输入t&#xff0c;表示有t个数据序列 第二行输入n&#xff0c;表示首个序列包含n个数据 第三行输入n个数据…

Axure中如何使用交互样式交互事件交互动作情形

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《产品经理如何画泳道图&流程图》 ⛺️ 越努力 &#xff0c;越幸运 目录 一、Axure中交互样式 1、什么是交互样式&#xff1f; 2、交互样式的作用&#xff1f; 3、Axure中如何…

【Jenkins】Pipeline 简单使用

什么是Jenkins pipeline Jenkins Pipeline是Jenkins的一个插件&#xff0c;它允许你以代码的方式定义和管理持续集成和交付流水线。通过Jenkins Pipeline&#xff0c;你可以将整个软件交付过程定义为一个可重复、可扩展和可管理的流水线。这个流水线可以包括构建、测试、部署和…

DRF从入门到精通二(Request源码分析、DRF之序列化组件)

文章目录 一、Request对象源码分析区分原生request和新生request新的request还能像原来的reqeust一样使用吗源码片段分析总结&#xff1a; 二、DRF之序列化组件序列化介绍序列化步骤序列化组件的基本使用反序列化基本使用反序列化的新增反序列化的新增删除单条 反序列化的校验 …

mangokit:golang web项目管理工具,使用proto定义http路由和错误

文章目录 前言1、mangokit介绍1.1 根据proto文件生成http路由1.2 根据proto文件生成响应码1.3 使用wire来管理依赖注入 2、mangokit实现2.1 protobuf插件开发2.2 mangokit工具 3、使用示例3.1 创建新项目3.2 添加新的proto文件3.3 代码生成 前言 在使用gin框架开发web应用时&a…

51单片机基于时间片轮转的简单rtos

早就想写写这个了&#xff0c;正好赶上有点时间&#xff0c;写了一下基于51单片机的时间片轮转调度系统&#xff0c;简单的rtos&#xff0c;呵呵。直接上代码。 //基于51单片机时间片轮转的简单rtos。 #include"reg52.h" sbit led1 P2^7; sbit led2 P2^0; sbit key…

Linux学习(1)——初识Linux

目录 一、Linux的哲学思想 1.1 基础知识 1.2 根目录下的文件夹 二、Shell 1、Shell的定义 2、Shell的作用 三、Linux命令行 1、Linux通用命令行使用格式 四、Linux命令的分类 1、内部命令和外部命令的理解 2、内部命令和外部命令的区别 3、命令的执行过程 五、编辑…

[每周一更]-(第31期):Mysql安装汇总

写自&#xff1a;20230204 23:25 一. mysql rpm二进制包 rpm -Uvh http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm yum install mysql-community-server service mysqld start set password password(“123456”)二. mysql yum安装 1、安装查看有没有安装…

面试题总结(十二)【Qt】【华清远见西安中心】

Qt是什么&#xff1f; Qt是一个跨平台的应用程序开发框架&#xff0c;最初由挪威的Trolltech公司开发。它提供了一套丰富的工具和类库&#xff0c;用于开发图形用户界面&#xff08;GUI&#xff09;应用程序、网络应用程序和嵌入式应用程序等。 Qt框架基于C语言编写&#xff0c…

DRF-流量控制-配置: 实现可以使用1/5m等限制规则,drf配置流量控制,drf重写流量控制类

一、base/throttle.py 在drf原生的流量控制中&#xff0c;只能支持1/m,1/s,1/h,1/d 等控制规则&#xff0c;不能实现1/5m,1/10s 等更加精细的控制。要是5分钟访问一次或多次&#xff0c;只能是通过12/h 这种来控制&#xff0c;不太友好。 重写SimpleRateThrottle 类的parse_r…

开源高星精选,10个2023企业级Python测试项目,再不学习今年没了

纸上得来终觉浅&#xff0c;光学习理论知识是不够的。 想要学好软件测试必须要结合实战项目深入掌握&#xff0c;今天给大家分享十个2023最新企业级Python软件测试项目&#xff1a; ▌Rank 1&#xff1a;Requests-HTML v0.9&#xff08;7385 stars on Github&#xff0c;来自K…

Python-基于fastapi实现SSE流式返回(类似GPT)

最近在做大模型对话相关功能&#xff0c;需要将对话内容流式返回给前端页面&#xff08;类似GPT的效果&#xff09;。下面直接说下如何实现&#xff1a; 1.首先导入fastapi和sse流式返回所需要的包 from fastapi import APIRouter, Response, status from sse_starlette.sse …

Vue2+Vue3组件间通信方式汇总(1)------props

目录 一、props (父传子&#xff0c;子传父) ------Vue2 ------Vue3 从Vue2(组合式API)和Vue3&#xff08;选择式API&#xff09;两个版本对每个组件间通信方式进行讲解&#xff1a; 一、props (父传子&#xff0c;子传父) ------Vue2 父组件&#xff1a; <template>&…

以太网的数据速率、互连介质和物理层规范

以太网协议连接已经广泛应用于我们周围的大量事物或设备中。过去&#xff0c;以太网用在局域网 (LAN) 和城域网 (MAN) 中&#xff0c;而如今&#xff0c;由于以太网的普及和多种优势&#xff0c;例如巨大的生态体系和日益增长的规模经济&#xff0c;它越来越多地用在存储和汽车…

鉴赏 tcp vegas

优秀的 vegas 之后&#xff0c;再鉴赏一下迄今唯一像那么回事的拥塞控制算法 vegas。 从下图可看出所有的(对&#xff0c;所有的) aimd 都毫无伸缩性(z:吞吐&#xff0c;x:rtt&#xff0c;y:丢包率&#xff0c;由 buffer_size 直接决定)&#xff1a; 一下就可看出 rtt 和 bu…