李臻20242817_安全文件传输系统项目报告_第14周

article/2025/8/6 2:06:13

安全文件传输系统项目报告(第 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
    

http://www.hkcw.cn/article/AiExwZUUpf.shtml

相关文章

分布式流处理与消息传递——Paxos Stream 算法详解

Java 实现 Paxos Stream 算法详解 一、Paxos Stream 核心设计 #mermaid-svg-cEJcmpaQwLXpEbx9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-cEJcmpaQwLXpEbx9 .error-icon{fill:#552222;}#mermaid-svg-cEJcmpaQw…

设计模式——观察者设计模式(行为型)

摘要 本文详细介绍了观察者设计模式&#xff0c;包括其定义、结构、实现方式、适用场景以及实战示例。通过代码示例展示了如何在Spring框架下实现观察者模式&#xff0c;以及如何通过该模式实现状态变化通知。同时&#xff0c;对比了观察者模式与消息中间件在设计理念、耦合程…

Android基础入门:dataBinding的简单使用

1.2修改布局文件 选中布局文件的第一行&#xff0c;按alterenter就会弹出提示&#xff0c;默认选中data binding layout 改造好的的新的布局文件里最大的变化就是多了一对<data></data>标签&#xff1b;很容易想到这是为了实现布局文件里数据和布局的分离&#xff…

在Android设置界面中实现颜色选择器

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;在Android开发中&#xff0c;颜色选择器是设置界面中实现用户自定义界面主题色或字体颜色的常用功能。本教程详细介绍了如何设计颜色选择器布局&#xff0c;通过 GridView 或 RecyclerView 展示颜色列表&am…

小程序微信认证/年审流程

看清楚文字描述&#xff0c;别光看图&#xff0c;图并不一定准确&#xff0c;按照你想填写的填写、&#xff0c;本教程只是提供一个参考。 1.登录微信公众平台 : 微信公众平台【← ←点击这个蓝色字体】&#xff08;选择正确的小程序&#xff09;&#xff0c;或者根据第三方…

macOS版本微信 4.0 之后,双开策略

从 macOS 版本微信 3.0 升级到 4.0 之后&#xff0c;之前的双开策略实效了。 当然期待微信能够让之前方法回归。这是最理想的。 咱也该自己动手丰衣足食 &#xff5e;&#xff5e;&#xff5e; 第一步 创建微信的「分身」 sudo cp -R /Applications/WeChat.app /Applicati…

EasyPlayer-RTSP-Android:一款强大的流媒体播放器

EasyPlayer-RTSP-Android&#xff1a;一款强大的流媒体播放器 【下载地址】EasyPlayer-RTSP-Android一款强大的流媒体播放器 EasyPlayer-RTSP-Android 是一款功能强大的 Android 流媒体播放器&#xff0c;支持 RTSP、RTMP、HLS 和 HTTP 等多种协议&#xff0c;适用于各种音视频…

mac怎么安装pycharm?

安装步骤&#xff1a;1、打开PyCharm官网&#xff0c;在官网首页点击“下载”按钮&#xff0c;选择“MacOS”版本进行下载&#xff1b;2、双击打开安装包&#xff0c;将PyCharm拖动到应用程序文件夹中&#xff1b;3、根据提示进行安装&#xff0c;在第一次运行PyCharm时&#x…

【工具】Raycast – Mac提效工具

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 引入 以前看到同事们锁屏的时候,不知按了什么键,直接调出这个框,然后输入lock屏幕就锁了。 跟我习惯的按Mac开机键不大一样。个人觉得还…

【实测可用】Sublime Text4 4169 mac/windows 破解注册 20240417 实测可用

官网下载Sublime Text4 官网地址&#xff1a;https://www.sublimetext.com/ 点击下载即可 不用安装&#xff0c;可以直接使用。 MAC 破解注册 修改可执行文件sublime_text 打开网站https://hexed.it/。找到sublime所在目录&#xff0c;比如我这里是&#xff1a;/Users/xxx/s…

小程序快速实现大模型聊天机器人

需求分析&#xff1a; 基于大模型&#xff0c;打造一个聊天机器人&#xff1b;使用开放API快速搭建&#xff0c;例如&#xff1a;讯飞星火&#xff1b;先实现UI展示&#xff0c;在接入API。 最终实现效果如下&#xff1a; 一.聊天机器人UI部分 1. 创建微信小程序&#xff0c…

iOS全能签使用全攻略

适用系统&#xff1a;iOS 12及以上设备 全能签是一款免费免越狱的IPA签名工具&#xff0c; 支持一键签名、多开安装、插件注入等功能&#xff0c;无需联网即可使用。 哈士奇软件源&#xff08;解锁更多资源&#xff09;&#xff1a;https://yuan.ioska.cn/appstore &#xff0…

手把手教你在VMware虚拟机安装macOS(含避坑指南)

文章目录 ▍前期准备&#xff08;重要&#xff01;&#xff01;&#xff01;&#xff09;必备三件套&#xff1a;避坑提醒&#xff1a; ▍详细安装步骤步骤1&#xff1a;安装Unlocker补丁步骤2&#xff1a;创建虚拟机步骤3&#xff1a;修改虚拟机配置文件步骤4&#xff1a;安装…

mac intel芯片下载安卓模拟器

一、调研 目前主流两个模拟器&#xff1a; 雷神模拟器 不支持macosmumu模拟器pro版 不支持macos intel芯片 搜索到mumu的Q&A中有 “Intel芯片Mac如何安装MuMu&#xff1f;” q&a&#x1f517;&#xff1a;https://mumu.163.com/mac/faq/install-on-intel-mac.html 提…

Android Studio 历史版本下载

Android Studio 历史版本下载 官方链接&#xff1a;https://developer.android.google.cn/studio/archive 通过gradle插件版本反查Android Studio历史版本 Android Studio Meerkat | 2024.3.1 【https://r1—sn-j5o76n7e.gvt1-cn.com/edgedl/android/studio/install/2024.3.…

有手就行 | Flutter在VSCode(Visual Studio Code)中的安装与配置

目录 一、前言二、资料参考三、版本参考四、Flutter在Visual Studio Code中的安装与配置&#xff08;一&#xff09;下载Flutter插件及SDK&#xff08;二&#xff09;检查开发配置及问题解决&#xff08;1&#xff09;通过代理解决&#xff08;2&#xff09;通过镜像网站解决 五…

任务21:天气信息大屏说明及流程

任务描述 1. 大屏制作流程 1&#xff09;创建DJango项目 2&#xff09;读取MySQL数据&#xff0c;并参照ECharts图形的数据格式进行处理 3&#xff09;参照对照模板、ECharts官网配置项手册及示例&#xff0c;将相应的ECharts图形绘制到大屏对应的容器中。 2. 大屏制作说明…

精英-探索双群协同优化(Elite-Exploration Dual Swarm Cooperative Optimization, EEDSCO)

一种多群体智能优化算法&#xff0c;其核心思想是通过两个分工明确的群体——精英群和探索群——协同工作&#xff0c;平衡算法的全局探索与局部开发能力&#xff0c;从而提高收敛精度并避免早熟收敛。 一 核心概念 在传统优化算法&#xff08;如粒子群优化、遗传算法&#xf…

Go 即时通讯系统:客户端与服务端 WebSocket 通信交互

客户端和服务端的交互 客户端与服务端建立连接 客户端&#xff1a;客户端通过浏览器或者其他应用程序发起一个 HTTP 请求到服务端的 /socket.io 路径。在请求中会携带用户的 UUID 作为参数&#xff08;通过 c.Query("user") 获取&#xff09;。 // router/socket.…

Python 训练营打卡 Day 41

简单CNN 一、数据预处理 在图像数据预处理环节&#xff0c;为提升数据多样性&#xff0c;可采用数据增强&#xff08;数据增广&#xff09;策略。该策略通常不改变单次训练的样本总数&#xff0c;而是通过对现有图像进行多样化变换&#xff0c;使每次训练输入的样本呈现更丰富…