当前位置: 首页 > news >正文

【QT】使用toBase64方法将.txt文件的明文变为非明文(类似加密)

目录

0.环境

1.背景

2.详细代码

2.1 .h主要代码

2.2 .cpp主要代码,主要实现上述的四个方法


0.环境

windows 11 64位  + Qt Creator 4.13.1 

1.背景

项目需求:我们项目中有配置文件(类似.txt,但不是这个格式,本文以.txt举例),这个配置文件希望对用户不可见,但是希望对工程师可见。所以需要开发一个类似将明文变为密文的方法,在开发时,将.txt变为明文,在提供给客户时,将.txt变为密文。

本文主要使用toBase64的方式将.txt的内容进行编码,需要注意的是:toBase64方法,这实际上并不是一个加密方法,它只是一种编码方式,可以很容易地被解码。但我们的项目要求不高,只需看不出来是什么内容即可,所以选择了这种方式。如果您的项目有加密文件的需求,建议考虑真正的加密方法,例如AES。

我的测试界面包含两个按钮:加密和解密

点击两个按钮都会弹出QFileDialog选择框,选择你想要加密/解密的文件

 原test.txt内容:

点击加密按钮,会调用加密方法,将test.txt中的明文内容变为编码(非明文)

点击解密按钮,会调用解密方法,将test.txt中的编码恢复为明文

2.详细代码

界面我是通过.ui文件拖控件上去的,这里就不做展示,加密控件名为【btn_encrypt】,解密控件名为【btn_decrypt】

2.1 .h主要代码

两个按钮的槽,对应界面的加密和解密按钮

private slots:void on_btn_encrypt_clicked();void on_btn_decrypt_clicked();

两个方法,主要对应加密、解密

private:QString encrypt(const QString& plainText);//加密函数QString decrypt(const QString& encryptedText);//解密函数

2.2 .cpp主要代码,主要实现上述的四个方法

void MainWindow::on_btn_encrypt_clicked()
{//打开一个文件对话框,并获取选择的文件路径QString filePath = "";filePath = QFileDialog::getOpenFileName();qDebug()<<"要加密的文件路径为: "<<filePath;QString encryptText;QFile inputFile(filePath);if (inputFile.open(QIODevice::ReadOnly| QIODevice::Text)){QTextStream in(&inputFile);QString dataText = in.readAll();inputFile.close();qDebug()<<"-----data:\n"<<dataText;encryptText = encrypt(dataText);qDebug()<<"-----encryptText:\n"<<encryptText;}QFile outputFile(filePath);if (outputFile.open(QIODevice::WriteOnly)) {QTextStream out(&outputFile);out << encryptText;outputFile.close();qDebug() << "encrypt completed.";} else {qDebug() << "Failed to open output file.";}
}
void MainWindow::on_btn_decrypt_clicked()
{//打开一个文件对话框,并获取选择的文件路径QString filePath = "";filePath = QFileDialog::getOpenFileName();qDebug()<<"要解密的文件路径为: "<<filePath;QFile inputFile(filePath);if (inputFile.open(QIODevice::ReadOnly| QIODevice::Text)) {QTextStream in(&inputFile);QString encryptedText = in.readAll();inputFile.close();qDebug()<<"-----encryptedText:\n"<<encryptedText;QString decryptedText = decrypt(encryptedText);QFile outputFile(filePath);if (outputFile.open(QIODevice::WriteOnly)) {QTextStream out(&outputFile);out << decryptedText;outputFile.close();qDebug() << "Decryption completed.";qDebug() <<"-----decryptedText:\n"<<decryptedText;} else {qDebug() << "Failed to open output file.";}} else {qDebug() << "Failed to open input file.";}
}
QString MainWindow::encrypt(const QString &plainText)
{QByteArray byteArray = plainText.toUtf8();QByteArray encryptedData = byteArray.toBase64();return QString(encryptedData);
}
QString MainWindow::decrypt(const QString &encryptedText)
{QByteArray encryptedData = encryptedText.toUtf8();QByteArray decryptedData = QByteArray::fromBase64(encryptedData);return QString(decryptedData);
}

至此可以实现开头的截图效果,项目记录,特此分享

本文的项目我已放入github中,以下链接可访问:

Wynne-nuo/encrypt_TXT_file_by_base64 (github.com)

参考:Qt以Base64加密作为基础实现3种加解密方式(包含中文处理)-CSDN博客

--END--

相关文章:

【QT】使用toBase64方法将.txt文件的明文变为非明文(类似加密)

目录 0.环境 1.背景 2.详细代码 2.1 .h主要代码 2.2 .cpp主要代码&#xff0c;主要实现上述的四个方法 0.环境 windows 11 64位 Qt Creator 4.13.1 1.背景 项目需求&#xff1a;我们项目中有配置文件&#xff08;类似.txt&#xff0c;但不是这个格式&#xff0c;本文以…...

《QDebug 2023年9月》

一、Qt Widgets 问题交流 1.Qt 程序在 Windows 上以管理员权限运行时无法响应拖放&#xff08;Drop&#xff09; 无论是 Widget 还是 QML 程序&#xff0c;以管理员权限运行时&#xff0c;都无法响应拖放操作。可以右键管理员权限打开 Qt Creator&#xff0c;然后丢个文本文件…...

C++使用高斯模糊处理图像

C使用高斯模糊处理图像 cv::GaussianBlur 是 OpenCV 中用于对图像进行高斯模糊处理的函数。高斯模糊是一种常用的图像滤波方法&#xff0c;它可以减少图像中的噪声&#xff0c;并平滑图像以降低细节级别。 void cv::GaussianBlur(const cv::Mat& src, cv::Mat& dst, …...

多维时序 | MATLAB实现PSO-BP多变量时间序列预测(粒子群优化BP神经网络)

多维时序 | MATLAB实现PSO-BP多变量时间序列预测(粒子群优化BP神经网络) 目录 多维时序 | MATLAB实现PSO-BP多变量时间序列预测(粒子群优化BP神经网络)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现PSO-BP粒子群优化BP神经网络多变量时间序列预测&#xff…...

LeetCode 283. 移动零

移动零 问题描述 LeetCode 283. 移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意&#xff0c;必须在不复制数组的情况下原地对数组进行操作。 解决思路 为了将所有 0 移动到数组的末尾&#…...

【数据结构】选择排序 堆排序(二)

目录 一&#xff0c;选择排序 1&#xff0c;基本思想 2&#xff0c; 基本思路 3&#xff0c;思路实现 二&#xff0c;堆排序 1&#xff0c;直接选择排序的特性总结&#xff1a; 2&#xff0c;思路实现 3&#xff0c;源代码 最后祝大家国庆快乐&#xff01; 一&#xf…...

opencv实现目标跟踪及视频转存

创建跟踪器 def createTypeTracker(trackerType): 读取视频第一帧&#xff0c;选择跟踪的目标 读第一帧。 ok, frame video.read() 选择边界框 bbox cv2.selectROI(frame, False) 初始化跟踪器 tracker_type ‘MIL’ tracker createTypeTracker(tracker_type) 用第一…...

R | R及Rstudio安装、运行环境变量及RStudio配置

R | R及Rstudio安装、运行环境变量及RStudio配置 一、介绍1.1 R介绍1.2 RStudio介绍 二、R安装2.1 演示电脑系统2.2 R下载2.3 R安装2.4 R语言运行环境设置&#xff08;环境变量&#xff09;2.4.1 目的2.4.2 R-CMD测试2.4.3 设置环境变量 2.5 R安装测试 三、RStudio安装3.1 RStu…...

智能回答机器人的“智能”体现在哪里?

人工智能的广泛应用已经成为当今社会科技发展的趋势之一。通过人工智能技术&#xff0c;我们可以在不同领域中实现自动化、智能化和高效化&#xff0c;从而大大提升生产和生活效率。智能回答机器人的出现和使用便能很好的证明这一点。今天我们就来探讨一下智能会打机器人的“智…...

多网卡场景数据包接收时ip匹配规则

多网卡场景数据包接收时ip匹配规则 mac地址匹配规则 接收数据包时数据包中的目的mac地址匹配接收网卡的mac地址后&#xff0c;数据包才会继续被传递到网络层处理 ip地址匹配规则 图1&#xff1a; 参见&#xff1a;https://zhuanlan.zhihu.com/p/529160026?utm_id0 图2&am…...

安防视频平台EasyCVR视频调阅全屏播放显示异常是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...

1.5.C++项目:仿muduo库实现并发服务器之socket模块的设计

项目完整版在&#xff1a; 一、socket模块&#xff1a;套接字模块 二、提供的功能 Socket模块是对套接字操作封装的一个模块&#xff0c;主要实现的socket的各项操作。 socket 模块&#xff1a;套接字的功能 创建套接字 绑定地址信息 开始监听 向服务器发起连接 获取新连接 …...

whisper+剪映+chatgpt实现实时语音对话功能

whisper将录音文件转成文字---chatgpt回答---剪映tts将文字转成语言。 GitHub - openai/whisper: Robust Speech Recognition via Large-Scale Weak Supervision whisper剪映chatgpt实现实时语音对话功能_哔哩哔哩_bilibili...

ASUS华硕ZenBook 13灵耀U 2代U3300F笔记本UX333FN/FA原装出厂Win10系统工厂安装模式

系统自带所有驱动、出厂主题壁纸、系统属性华硕专属LOGO标志、Office办公软件、MyASUS华硕电脑管家等预装程序 下载链接&#xff1a;https://pan.baidu.com/s/1dK0vMZMECPlT63Rb6-jeFg?pwdbym5 所需要工具&#xff1a;16G或以上的U盘(非必需) 文件格式&#xff1a;HDI,SWP,O…...

前端面试的话术集锦第 21 篇博文——高频考点(设计模式)

这是记录前端面试的话术集锦第二十一篇博文——高频考点(设计模式),我会不断更新该博文。❗❗❗ 设计模式总的来说是一个抽象的概念,前人通过无数次的实践总结出的一套写代码的方式,通过这种方式写的代码可以让别人更加容易阅读、维护以及复用。 这一章节我们将来学习几…...

php实战案例记录(2)生成包含字母和数字但不重复的用户名

在PHP中&#xff0c;您可以使用以下代码生成不重复的10个用户名&#xff0c;每个用户名包含英文字母和数字&#xff1a; $generatedUsernames array(); // 存储生成的用户名while (count($generatedUsernames) < 10) {$username generateUsername();if (!in_array($usern…...

分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测

分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测&#xff0…...

【ARMv8 SIMD和浮点指令编程】NEON 加载指令——如何将数据从内存搬到寄存器(其它指令)?

除了基础的 LDx 指令,还有 LDP、LDR 这些指令,我们也需要关注。 1 LDNP (SIMD&FP) 加载 SIMD&FP 寄存器对,带有非临时提示。该指令从内存加载一对 SIMD&FP 寄存器,向内存系统发出访问是非临时的提示。用于加载的地址是根据基址寄存器值和可选的立即偏移量计算…...

ElementPlus· tab切换/标签切换 + 分页

tab切换 ---> <el-tabs><el-tab-pane>... 分页 --------> <el-pagination> tab切换 // tab标签切换 // v-model双向绑定选项中的name&#xff0c;tab-change事件在 activeName改变时触发 <script setup> const tabChange (tab, event)>{…...

华为云云耀云服务器L实例评测|搭建CounterStrike Source Delicated Server(CS起源游戏服务器)

华为云云耀云服务器L实例评测&#xff5c;搭建CounterStrike Source Delicated Server&#xff08;CS起源游戏服务器&#xff09; #【有奖征文】华为云云服务器焕新上线&#xff0c;快来亲身感受评测吧&#xff01;# ⭐️ CounterStrikeSource&#xff08;CS起源是Valve的一款…...

火狐浏览器必备:Z-Library Finder扩展安装与使用全攻略(附最新下载链接)

火狐浏览器高效获取电子书资源&#xff1a;Z-Library Finder扩展深度指南 在数字阅读日益普及的今天&#xff0c;电子书资源获取工具成为许多阅读爱好者的刚需。对于火狐浏览器用户而言&#xff0c;Z-Library Finder扩展无疑是一款能够极大提升电子书搜索效率的神器。这款工具专…...

功能关键词 AI 短剧爆发:Sora、Pixverse、可灵视频重构影视行业(中外模型对比)

c.myliang.cn深耕 AI 内容创作与 SEO 优化多年&#xff0c;聚焦 2026 年百度 SEO/GEO 关键词布局&#xff0c;结合 AI 短剧行业爆发趋势&#xff0c;帮影视从业者快速掌握 Sora、Pixverse、可灵视频等中外模型实操技巧&#xff0c;适配百度算法与行业需求&#xff0c;低成本打造…...

Python零基础到入门-数据类型的内置方法(1)

当我们在操作 字符串/列表&#xff0c;要想到对字符串或者列表做一些高级的操作字符串 判断这个字符是否以 某个字符开头列表 添加元素 删除元素 修改元素 。。。官方根据上边的功能&#xff0c;给我们提供了一些公共的接口&#xff08;方法&#xff09;【一】整数类型语法&…...

嵌入式新手入门:用快马平台生成带详细注释的LED控制项目

作为一个嵌入式开发新手&#xff0c;刚开始接触STM32时确实有点懵。寄存器配置、时钟树、GPIO模式这些概念扑面而来&#xff0c;光看理论文档很容易失去方向。最近我发现用InsCode(快马)平台生成带详细注释的基础项目特别适合入门&#xff0c;今天就以最经典的LED流水灯为例&am…...

熵值法实战避坑指南:从数据标准化到权重计算,新手最容易踩的3个雷

熵值法实战避坑指南&#xff1a;从数据标准化到权重计算&#xff0c;新手最容易踩的3个雷 第一次用熵值法做综合评价时&#xff0c;我盯着屏幕上几乎相同的权重值发愣——这和教科书上"差异越大权重越高"的描述完全不符。直到深夜排查才发现&#xff0c;原来在数据标…...

如何快速将Blender模型导入Unreal Engine?免费Datasmith插件完整指南

如何快速将Blender模型导入Unreal Engine&#xff1f;免费Datasmith插件完整指南 【免费下载链接】bl_datasmith Blender addon to export UE4 Datasmith format 项目地址: https://gitcode.com/gh_mirrors/bl/bl_datasmith Blender Datasmith Export是一款开源免费的Bl…...

使用xrdp实现Windows远程桌面无缝连接WSL2中的Ubuntu24.04

1. 为什么需要远程桌面连接WSL2&#xff1f; 很多开发者习惯在Windows系统上使用WSL2运行Ubuntu进行开发工作&#xff0c;但默认情况下WSL2只提供命令行界面。虽然大多数开发任务可以通过命令行完成&#xff0c;但有些场景下图形界面会更方便&#xff1a; 运行需要GUI的应用程…...

m3u8流媒体视频下载工具的技术实现与应用指南

m3u8流媒体视频下载工具的技术实现与应用指南 m3u8流媒体视频下载工具是一款基于现代Web技术栈开发的桌面应用程序&#xff0c;专门用于处理各类在线视频资源的下载需求。该工具采用TypeScript语言开发&#xff0c;结合Electron框架构建跨平台桌面应用&#xff0c;为用户提供专…...

Golang面试避坑指南:这5个并发问题90%的人答不对

Golang面试避坑指南&#xff1a;这5个并发问题90%的人答不对 刚接触Go语言的开发者往往会被其简洁的语法和高效的并发模型所吸引&#xff0c;但真正深入使用后才会发现&#xff0c;并发编程中隐藏着许多意想不到的陷阱。特别是在技术面试中&#xff0c;面试官常常会通过精心设计…...

3个技巧快速掌握LeagueAkari:英雄联盟智能辅助工具实战指南

3个技巧快速掌握LeagueAkari&#xff1a;英雄联盟智能辅助工具实战指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为BP阶…...