李臻20242817_安全文件传输系统项目报告_第14周
安全文件传输系统项目报告(第 14 周)
1. 代码链接
Gitee 仓库地址:https://gitee.com/li-zhen1215/homework/tree/master/Secure-file
代码结构说明:
SecureFileTransfer/
├── client/ # 客户端主目录
│ ├── client # 命令行客户端可执行文件
│ ├── main.c # 命令行客户端主程序
│ ├── gui/ # Qt图形界面客户端
│ │ ├── mainwindow.h/.cpp # Qt主窗口
│ │ ├── main.cpp # Qt主程序入口
│ │ ├── SecureFileTransferClient.pro # Qt工程文件
│ │ └── ... # 其他Qt相关文件
│ ├── network/ # 客户端网络通信模块
│ │ ├── client_network.h/.c # 客户端Socket通信实现
│ └── crypto/ # 客户端加解密相关
├── server/ # 服务器端主目录
│ ├── server # 服务器端可执行文件
│ ├── main.c # 服务器主程序
│ ├── db/ # 数据库相关
│ │ ├── db.h/.c # SQLite操作
│ ├── crypto/ # 服务器端加解密相关
│ │ ├── sm2_utils.h/.c # SM2算法
│ │ ├── sm3_utils.h/.c # SM3算法
│ │ ├── sm4_utils.h/.c # SM4算法
│ ├── file_utils.h/.c # 文件操作工具
│ └── network/ # 服务器网络相关
├── common/ # 公共协议与工具
│ ├── protocol.h # 通信协议头文件
│ ├── utils.h/.c # 公共工具函数
├── doc/ # 文档
│ └── 设计说明.md
├── requirements.txt # 依赖说明
└── README.md # 项目说明
1、用户登录注册界面
- 登录界面
该界面提供了用户登录和注册的入口,用户可以通过输入用户名和密码进行登录操作,或者选择跳转到注册界面以创建新账户。
通过该界面,用户能够顺利地完成登录或注册过程,从而访问系统的其他功能。
对登录失败的用户,系统会给予提示。
- 注册界面
新用户可以在当前界面进行注册。
注册失败会有相应提示。
注册成功后便可在登录界面进行操作,并进入相关用户的主界面中。
2、主界面
用户登陆成功后,可在主界面进行文件管理,上传或下载文件。
在用户成功登录后,他们可以在主界面进行文件管理,包括上传和下载文件。
该界面提供了一个简洁直观的操作平台,用户可以通过选择本地文件并点击上传按钮,将文件安全地传输至服务器。此外,用户还可以下载已上传的文件,或删除不再需要的文件。
若文件列表未能及时更新,用户可通过点击界面右侧的刷新列表功能,以确保文件信息的实时更新。
mainwindow.cpp
#include <memory>
#include "mainwindow.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'mainwindow.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.15.3. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endifQT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_MainWindow_t {QByteArrayData data[9];char stringdata0[99];
};
#define QT_MOC_LITERAL(idx, ofs, len) \Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \qptrdiff(offsetof(qt_meta_stringdata_MainWindow_t, stringdata0) + ofs \- idx * sizeof(QByteArrayData)) \)
static const qt_meta_stringdata_MainWindow_t qt_meta_stringdata_MainWindow = {{
QT_MOC_LITERAL(0, 0, 10), // "MainWindow"
QT_MOC_LITERAL(1, 11, 12), // "onSelectFile"
QT_MOC_LITERAL(2, 24, 0), // ""
QT_MOC_LITERAL(3, 25, 8), // "onUpload"
QT_MOC_LITERAL(4, 34, 10), // "onDownload"
QT_MOC_LITERAL(5, 45, 8), // "onDelete"
QT_MOC_LITERAL(6, 54, 9), // "onRefresh"
QT_MOC_LITERAL(7, 64, 15), // "showLoginDialog"
QT_MOC_LITERAL(8, 80, 18) // "showRegisterDialog"},"MainWindow\0onSelectFile\0\0onUpload\0""onDownload\0onDelete\0onRefresh\0""showLoginDialog\0showRegisterDialog"
};
#undef QT_MOC_LITERALstatic const uint qt_meta_data_MainWindow[] = {// content:8, // revision0, // classname0, 0, // classinfo7, 14, // methods0, 0, // properties0, 0, // enums/sets0, 0, // constructors0, // flags0, // signalCount// slots: name, argc, parameters, tag, flags1, 0, 49, 2, 0x08 /* Private */,3, 0, 50, 2, 0x08 /* Private */,4, 0, 51, 2, 0x08 /* Private */,5, 0, 52, 2, 0x08 /* Private */,6, 0, 53, 2, 0x08 /* Private */,7, 0, 54, 2, 0x08 /* Private */,8, 0, 55, 2, 0x08 /* Private */,// slots: parametersQMetaType::Void,QMetaType::Void,QMetaType::Void,QMetaType::Void,QMetaType::Void,QMetaType::Void,QMetaType::Void,0 // eod
};void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{if (_c == QMetaObject::InvokeMetaMethod) {auto *_t = static_cast<MainWindow *>(_o);(void)_t;switch (_id) {case 0: _t->onSelectFile(); break;case 1: _t->onUpload(); break;case 2: _t->onDownload(); break;case 3: _t->onDelete(); break;case 4: _t->onRefresh(); break;case 5: _t->showLoginDialog(); break;case 6: _t->showRegisterDialog(); break;default: ;}}(void)_a;
}QT_INIT_METAOBJECT const QMetaObject MainWindow::staticMetaObject = { {QMetaObject::SuperData::link<QMainWindow::staticMetaObject>(),qt_meta_stringdata_MainWindow.data,qt_meta_data_MainWindow,qt_static_metacall,nullptr,nullptr
} };const QMetaObject *MainWindow::metaObject() const
{return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}void *MainWindow::qt_metacast(const char *_clname)
{if (!_clname) return nullptr;if (!strcmp(_clname, qt_meta_stringdata_MainWindow.stringdata0))return static_cast<void*>(this);return QMainWindow::qt_metacast(_clname);
}int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{_id = QMainWindow::qt_metacall(_c, _id, _a);if (_id < 0)return _id;if (_c == QMetaObject::InvokeMetaMethod) {if (_id < 7)qt_static_metacall(this, _c, _id, _a);_id -= 7;} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {if (_id < 7)*reinterpret_cast<int*>(_a[0]) = -1;_id -= 7;}return _id;
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE
3、遇到的问题
问题1:gm库在项目中无法使用
- 现象:在QT程序中,无法识别gm相关的头文件
- 原因:gm安装的时候路径安装随意,配置环境路径的时候操作不当,导致混乱
- 解决:卸载当前系统中和gm相关的所有环境,清空相关的系统环境变量,再重新下载gm库。安装到正确的路径下并配置环境变量。
问题2:程序在运行过程中有时会崩溃
- 现象:在运行某一个功能时会突然卡死并弹出提示
- 原因:Ubuntu虚拟机资源不足
- 解决:退出当前环境并分配更多资源
在虚拟机设置中分配内存资源,然后启动Ubuntu进入系统管理界面
将扩展的内存分配到当前文件夹中,并选择Apply,此时才能正常运行Ubuntu,否则会卡死。
4. 提交报告文档要求
Markdown 文档
- 本报告使用 Markdown 编写,文件名为
姓名学号_项目名称_第 XX 周.md
。 - 包含代码块、图片链接、列表等标准语法。
转换为 PDF
- 工具:使用 VS Code 插件 Markdown PDF 或在线工具 Pandoc。
- 步骤:
# 命令行转换示例 pandoc project-report.md -o project-report.pdf --pdf-engine=xelatex
相关文章:

李臻20242817_安全文件传输系统项目报告_第14周
安全文件传输系统项目报告(第 14 周) 1. 代码链接 Gitee 仓库地址:https://gitee.com/li-zhen1215/homework/tree/master/Secure-file 代码结构说明: SecureFileTransfer/ ├── client/ # 客户端主目…...

20250531MATLAB三维绘图
MATLAB三维绘图 三维曲线:plot3功能介绍代码实现过程plot3实现效果 三维曲面空间曲面作图命令:meshmeshgrid语法示例应用meshgrid实操训练 peakspeaks 的基本用法peaks数学表达式实操训练自定义网格大小使用自定义网格 meshMATLAB代码对齐快捷键Ctrli墨西…...

深入理解C#异步编程:原理、实践与最佳方案
在现代软件开发中,应用程序的性能和响应能力至关重要。特别是在处理I/O密集型操作(如网络请求、文件读写、数据库查询)时,传统的同步编程方式会导致线程阻塞,降低程序的吞吐量。C# 的异步编程模型(async/aw…...

基于千帆大模型的AI体检报告解读系统实战:使用OSS与PDFBox实现PDF内容识别
目录 说明 前言 需求 流程说明 表结构说明 整体流程 百度智能云 注册和实名认证 创建应用 费用说明 大模型API说明 集成大模型 设计Prompt 上传体检报告 读取PDF内容 功能实现 智能评测 抽取大模型工具 功能实现 总结 说明 AI体检报告解读、病例小结或者…...
Redis缓存落地总结
最近在优化电子签系统,涉及到缓存相关的也一并优化了,写个文档做个总结,防止以后开发时又考虑不全 1、避免大key 避免缓存大PDF文件: 💡 经验值:单个Redis Value不超过10KB,集合元素不超过500…...

Spring,SpringMVC,SpringBoot
1.Spring最核心包括aop和ioc概念 AOP 能够将将哪些于业务无关的,并且大量重复的业务逻辑进行封装起来,便于减少重复代码,降低模块之间的耦合度,给未来的系统更好的可用性和可维护性。 Spring中AOP是采用动态代理,JDK代…...
npm、pnpm、yarn使用以及区别
npm 使用 安装包:在项目目录下,npm install <包名> 用于本地安装包到 node_modules 目录,并添加到 package.json 的 dependencies 中;npm install -g <包名> 用于全局安装,适用于命令行工具等。初始化项目…...
flutter加载dll 报错问题
解决flutter加载dll 报错问题 LoadLibrary 报错 126 or 193 明确一点:flutter构建exe 时默认是MSVC的。 1. 先检查dll 的位数是否满足 file ***.dll output: PE32 executable (DLL) (console) x86-64, for MS Windows, 19 sections 这种是64位的机器。 满足的话可…...

数据分析学习笔记——A/B测试
目录 前言 A/B测试中的统计学方法 假设检验 Levenes Test莱文测试 t 检验(两组均值差异) 实战案例 数据来源及参考资料 代码详解 导入数据 计算ROI Request检验 GMV检验 ROI检验 结语 前言 什么是A/B测试?说白了就是中学生物实…...
【python深度学习】Day 41 简单CNN
知识回顾 数据增强卷积神经网络定义的写法batch归一化:调整一个批次的分布,常用与图像数据特征图:只有卷积操作输出的才叫特征图调度器:直接修改基础学习率 卷积操作常见流程如下: 1. 输入 → 卷积层 → Batch归一化层…...

基于RK3568/RK3588/全志H3/飞腾芯片/音视频通话程序/语音对讲/视频对讲/实时性好/极低延迟
一、前言说明 近期收到几个需求都是做音视频通话,很多人会选择用webrtc的方案,这个当然是个不错的方案,但是依赖的东西太多,而且相关组件代码量很大,开发难度大。所以最终选择自己属性的方案,那就是推流拉…...

解决 Win11 睡眠后黑屏无法唤醒的问题
目录 一、问题描述二、解决方法1. 禁用快速启动2. 设置 Management Engine Interface3. 允许混合睡眠其他命令 4. 修复系统文件5. 更新 Windows 或驱动程序6. 其他1)更改电源选项2)刷新 Hiberfil.sys 文件3)重置电源计划4)运行系统…...

[ElasticSearch] RestAPI
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...

Linux中的shell脚本
什么是shell脚本 shell脚本是文本的一种shell脚本是可以运行的文本shell脚本的内容是由逻辑和数据组成shell脚本是解释型语言 用file命令可以查看文件是否是一个脚本文件 file filename 脚本书写规范 注释 单行注释 使用#号来进行单行注释 多行注释 使用 : " 注释内容…...

dvwa3——CSRF
LOW: 先尝试change一组密码:123456 修改成功,我们观察上面的url代码 http://localhost/DVWA/vulnerabilities/csrf/?password_new123456&password_conf123456&ChangeChange# 将password_new部分与password_conf部分改成我们想要的…...

【学习笔记】Transformer
学习的博客(在此致谢): 初识CV - Transformer模型详解(图解最完整版) 1 整体结构 Transformer由Encoder和Decoder组成,分别包含6个block。 Transformer的工作流程大体如下: 获取每个单词的em…...

欢乐熊大话蓝牙知识12:用 BLE 打造家庭 IoT 网络的三种方式
🏠 用 BLE 打造家庭 IoT 网络的三种方式 不止是“蓝牙耳机”,BLE 还能把你家“点亮成精”! 👋 前言:BLE 不只是蓝牙耳机的“代名词” 蓝牙?很多人一听就联想到“耳机连接失败请重试”。但你知道吗?现在 BLE(Bluetooth Low Energy)在智能家居中已经偷偷搞起了大事情。…...

02.上帝之心算法用GPU计算提速50倍
本文介绍了上帝之心的算法及其Python实现,使用Python语言的性能分析工具测算性能瓶颈,将算法最耗时的部分重构至CUDA C语言在纯GPU上运行,利用GPU核心更多并行更快的优势显著提高算法运算速度,实现了结果不变的情况下将耗时缩短五…...

MES管理系统:Java+Vue,含源码与文档,实现生产过程实时监控、调度与优化,提升制造企业效能
前言: 在当今竞争激烈的制造业环境中,企业面临着提高生产效率、降低成本、提升产品质量以及快速响应市场变化等多重挑战。MES管理系统作为连接企业上层计划管理系统与底层工业控制之间的桥梁,扮演着至关重要的角色。它能够实时收集、分析和处…...

LeetCode算法题 (搜索二维矩阵)Day18!!!C/C++
https://leetcode.cn/problems/search-a-2d-matrix/description/ 一、题目分析 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 ta…...

VectorStore 组件深入学习与检索方法
考虑到目前市面上的向量数据库众多,每个数据库的操作方式也无统一标准,但是仍然存在着一些公共特征,LangChain 基于这些通用的特征封装了 VectorStore 基类,在这个基类下,可以将方法划分成 6 种: 相似性搜…...

HackMyVM-First
信息搜集 主机发现 ┌──(kali㉿kali)-[~] └─$ nmap -sn 192.168.43.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-31 06:13 EDT Nmap scan report for 192.168.43.1 Host is up (0.0080s latency). MAC Address: C6:45:66:05:91:88 (Unknown) …...
30V/150A MOSFET 150N03在无人机驱动动力系统中的性能边界与热设计挑战
产品技术概述 150N03 是一款基于沟槽式工艺(Trench Technology)的N沟道功率MOSFET,其核心价值在于: 电压/电流规格:VDSS30V, ID150A (Tc25℃) 工艺特征:高密度元胞设计实现超低导通电阻 双面散热架构:顶部裸露铜架底…...
数据共享交换平台之数据资源目录
依据信息资源体系规范,构建多维度、多层级的资源目录体系,完整的展示和管理资源目录。资源目录提供以下功能: 多层级资源目录展示,能够将资源目录按照技术维度和管理维度进行分类管理,并能够将资源目录按照数据湖、基础…...

跨平台浏览器集成库JxBrowser 支持 Chrome 扩展程序,高效赋能 Java 桌面应用
JxBrowser 是 TeamDev 开发的跨平台库,用于在 Java 应用程序中集成 Chromium 浏览器。它支持 HTML5、CSS3、JavaScript 等,具备硬件加速渲染、双向 Java 与 JavaScript 连接、丰富的事件监听等功能,能处理网页保存、打印等操作,助…...

WEBSTORM前端 —— 第3章:移动 Web —— 第3节:移动适配
目录 一、移动Web基础 1.谷歌模拟器 2.屏幕分辨率 3.视口 4.二倍图 二、适配方案 三、rem 适配方案 四、less 1.less – 简介 2.less – 注释 3.less – 运算 4.less – 嵌套 5.less – 变量 6.less – 导入 7.less – 导出 8.less – 禁止导出 五…...
38.springboot使用rabbitmq
pom依赖 <!--amqp依赖,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> 配置文件添加 spring:application:name: message…...

弱光环境下如何手持相机拍摄静物:摄影曝光之等效曝光认知
写在前面 博文内容为一次博物馆静物拍摄笔记的简单总结内容涉及:弱光环境拍摄静物如何选择,以及等效曝光的认知理解不足小伙伴帮忙指正 😃,生活加油 我看远山,远山悲悯 持续分享技术干货,感兴趣小伙伴可以关注下 _ 采…...
Selenium Manager中文文档
1. 什么是 Selenium Manager(测试版) Selenium Manager 是 Selenium 官方提供的命令行工具(用 Rust 实现),用于自动管理浏览器及其驱动(chromedriver、geckodriver、msedgedriver 等)。从 Sele…...
WEB安全--SQL注入--MSSQL注入
一、SQLsever知识点了解 1.1、系统变量 版本号:version 用户名:USER、SYSTEM_USER 库名:DB_NAME() SELECT name FROM master..sysdatabases 表名:SELECT name FROM sysobjects WHERE xtypeU 字段名:SELECT name …...