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

news2024/11/15 13:49:35

一、说明

在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_OBJECT

public:
    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_OBJECT

public:
    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,填充方式ZERO
    QAESEncryption 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,填充方式ZERO
    QAESEncryption 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转QString
    QString decodedTextStr = QString::fromLatin1(decodedText);
    //qDebug()<<"decodedText:"<< decodedTextStr;

    return decodedTextStr;
}
运行测试

不加fromBase64、toBase64时

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

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

相关文章

车载蓝牙物联网解决方案

车载蓝牙物联网解决方案是一种基于蓝牙技术&#xff0c;结合物联网技术的智能车载系统。它利用蓝牙技术将智能手机、智能手表、智能车载设备等连接起来&#xff0c;实现设备之间的无缝通信和数据共享&#xff0c;为驾驶者提供更加便捷、安全和智能的驾驶体验。 车载蓝牙物联网解…

6.6k star!推荐一款轻松创建隔离环境的命令行及容器工具!

本文小编向大家推荐一款可轻松创建隔离的 shell 和容器的开源工具。这款工具叫做 Devbox, 中文名译为 开发者沙箱&#xff0c;GitHub Star 已经有6.6k。 下面给大家介绍这款工具的功能和使用。 项目介绍 Devbox 是一个可以让我们轻松创建隔离环境的 shell 与 容器 的命令行工…

Spring MVC控制层框架

三、Spring MVC控制层框架 目录 一、SpringMVC简介和体验 1. 介绍2. 主要作用3. 核心组件和调用流程理解4. 快速体验 二、SpringMVC接收数据 1. 访问路径设置2. 接收参数&#xff08;重点&#xff09; 2.1 param 和 json参数比较2.2 param参数接收2.3 路径 参数接收2.4 json参…

vue 学习笔记

生命周期 1&#xff09;定义&#xff1a;vue实例从创建到销毁的过程 2&#xff09;钩子函数 2.1&#xff09;beforeCreate&#xff1a;vue实例初始化之前调用&#xff0c;这个阶段vue实例刚刚在内存中创建&#xff0c;此时data和methods这些都没初始化好。 2.2&#xff09;Cre…

新时代体育场馆的未来之路——气膜体育馆

近年来&#xff0c;我国正全面贯彻实施全民健身国家战略&#xff0c;秉持“发展群众体育&#xff0c;服务健康中国”的理念&#xff0c;深入推动群众参与的体育活动&#xff0c;努力实现全民健身与全民健康的深度融合发展。在这一大潮中&#xff0c;体育场馆建设成为业内的一项…

Linux:锁定文件chattr

chattr 锁定 使用该命令进行文件的锁定以提高安全性 chattr i /etc/passwd /etc/shadow chattr i 目标文件 这样这两个文件就不能被修改了&#xff0c;包括root也不能去修改&#xff0c;但是root可以解锁后再去修改 解锁 chattr -i /etc/passwd /etc/shadow chattr -i 目标…

《PySpark大数据分析实战》-16.云服务模式Databricks介绍运行案例

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

【深度学习】序列生成模型(六):评价方法计算实例:计算ROUGE-N得分【理论到程序】

文章目录 一、BLEU-N得分&#xff08;Bilingual Evaluation Understudy&#xff09;二、ROUGE-N得分&#xff08;Recall-Oriented Understudy for Gisting Evaluation&#xff09;1. 定义2. 计算N1N2 3. 程序 给定一个生成序列“The cat sat on the mat”和两个参考序列“The c…

快速入门 — — 在Moonbeam上开发

访问熟悉的以太坊工具是一回事&#xff0c;获得顶级支持、拥有构建突破性跨链应用程序的资源是另一回事。 Moonbeam汇集了通过集成互操作性解决方案访问任何链的能力、具有完全以太坊兼容性的理想开发环境&#xff0c;以及使用Substrate在波卡上安全扩展的能力。 开始在Moonb…

App(Android)ICP备案号查询——————高仿微信

&#x1f604; 个人主页&#xff1a;✨拉莫帅-CSDN博客✨&#x1f914; 博文&#xff1a;132篇&#x1f525; 原创&#xff1a;130篇&#xff0c;转载&#xff1a;2篇&#x1f525; 总阅读量&#xff1a;388923❤️ 粉丝量&#xff1a;112&#x1f341; 感谢点赞和关注 &#x…

C/C++ BM1反转链表

文章目录 前言题目1.解决方案一1.1 思路阐述1.2 源码 2. 解决方案二2.1 思路阐述2.2 源码 总结 前言 这题是牛客网的BM1&#xff0c;主要涉及到链表的操作以及栈数据结构的使用。 题目 给定一个单链表的头结点pHead(该头节点是有值的&#xff0c;比如在下图&#xff0c;它的…

如何免费搭建私人电影网站(三)

接上一篇文章&#xff1a; 网站模版上传到空间后就进行安装网站了操作如下图&#xff1a; 打开链接地址&#xff1a; 输入前面设置好的FTP密码 进入安装界面 点同意后下一步 需要填入数据库的账号和密码 返回虚拟主机界面进行设置 如下图点初始化 修改数据库的密码 然后…

如何设置微信的自动回复,让你的沟通更高效?

你们会常常遇到这些问题吗&#xff1f; 1、有过客户添加你没有及时回复&#xff0c;导致客户的流失。 2、客户常问的问题每天要重复的回答&#xff0c;想要有快捷回复的方式或者有可以代替人工去回答一些问题。 ...... 微信自动回复就可以让你在忙碌或者不方便回复消息的时候&a…

带你深入解析 Compose 的 Modifier 原理 -- Modifier、CombinedModifier

Modifier 的含义 实际开发过程中&#xff0c;随处可见各种 Modifier&#xff0c;比如&#xff1a; Modifier.size() // 尺寸Modifier.width() // 宽度Modifier.height() // 高度Modifier.padding() // 间距Modifier.background() // 背景Modifier.…

二阶多智能体的一致性-包含matlab仿真代码

模型 这里仅用一个简单的双积分模型 { x ˙ i v i v ˙ i u i \begin{equation} \begin{cases} {\dot x}_i v_i \\ {\dot v}_i u_i \\ \end{cases} \end{equation} {x˙i​vi​v˙i​ui​​​​ 我们的控制最终的期望是使得状态趋于一致&#xff0c;即 lim ⁡ t → ∞ ∣…

2024年云渲染哪个便宜?超实惠不排队的云渲染农场推荐

随着云计算技术的进步&#xff0c;云渲染逐渐成为动画制作和视觉效果产业中的首选技术。然而&#xff0c;对于许多创作者来说&#xff0c;寻找既经济又可靠的云渲染提供商一直是个重点问题。在众多云渲染提供商中&#xff0c;一家以其超值的性价比而闻名的云渲染农场尤其受到青…

Windows下安装MongoDB实践总结

本文记录Windows环境下的MongoDB安装与使用总结。 【1】官网下载 官网下载地址&#xff1a;Download MongoDB Community Server | MongoDB 这里可以选择下载zip或者msi&#xff0c;zip是解压后自己配置&#xff0c;msi是傻瓜式一键安装。这里我们分别对比进行实践。 【2】ZI…

Hudi 表类型和查询类型

数据湖hudi的表类型定义了数据在DFS上如何组织布局&#xff0c;同时实现一些timeline等操作&#xff08;表类型定定义数据是如何写入的&#xff09;&#xff1b;查询类型则是定义如何读取DFS上的数据。 Table typequery typeCopy-On-Write 快照查询&#xff1b; 增量查询&…

【数据分享】2019-2023年我国地级市逐年二手房房价数据(免费获取/Excel/Shp格式)

房价是一个城市发展程度的重要体现&#xff0c;一个城市的房价越高通常代表这个城市越发达&#xff0c;对于人口的吸引力越大&#xff01;因此&#xff0c;房价数据是我们在各项城市研究中都非常常用的数据&#xff01;之前我们分享了2019—2023年我国地级市逐月的二手房房价数…

VWAP 订单的最佳执行方法:随机控制法

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…