基于.Net Core+Vue的文件加密系统
1系统架构图

2 用例图
管理员角色的用例:
- 文件分享大厅:管理员可以访问文件分享大厅,下载文件。
- 个人信息管理:管理员可以更新自己的个人信息,修改密码。
- 用户管理:管理员负责创建、更新或删除用户账户,并分配权限,导出用户信息。
- 文件资源管理:管理员对系统中所有文件资源有全面管理权限,包括文件的加密、解密、更新、删除。
- 文件分享管理:管理员可以查看所有用户分享的文件,监控分享文件,可以对分享的文件进行删除,修改。
- 文件分享记录管理:管理员可以查看所有文件分享的记录,以确保跟踪和合规性。
- 用户磁盘管理:管理员有权管理用户磁盘空间的分配和使用情况。
用户角色的用例:
- 文件分享大厅:用户可以访问文件分享大厅,浏览可分享的文件,以及下载分享文件。
- 文件资源管理:用户可以管理自己上传的文件,执行上传、加密、解密、删除等操作。
- 文件分享管理:用户可以查看自己分享的文件,监控分享文件,可以对分享的文件进行删除,修改。
- 4.文件分享记录管理:用户可以查看自己分享的文件记录被谁下载了。

3 功能模块实现
加密系统的功能模块实现需要考虑多个方面,包括密码资源、密码服务、用户界面等。在实现过程中,还要考虑系统的安全性、可靠性和易用性。[10]
3.1 文件分享大厅模块
文件分享大厅中,展示了所有用户分享的文件。这个大厅是一个公开的平台,任何人都可以在这里查看和下载他人分享的文件。提供了一个搜索功能,可以通过输入文件名称或者分享人的名字来快速找到你需要的文件。当用户下载一个文件时,是在下载一个加密后的版本。这样做的目的,一方面是为了保护分享人的隐私,防止他们的内容被未经授权的人使用。

关键代码:
//查询文件分享表var items = DbContext.Queryable<FileInfoShare>().WhereIF(input.InputPassword.IsNotNullOrNotWhiteSpace(), x => x.InputPassword.Contains(input.InputPassword)).WhereIF(input.ShareLinks.IsNotNullOrNotWhiteSpace(), x => x.ShareLinks.Contains(input.ShareLinks)).WhereIF(input.ValidityRange.HasItem(), x => x.Validity >= input.ValidityRange[0] && x.Validity <= input.ValidityRange[1]).WhereIF(input.IsInvalid.IsNotNullOrNotWhiteSpace(), x => x.IsInvalid.Contains(input.IsInvalid)).WhereIF(input.IsOpen.IsNotNullOrNotWhiteSpace(), x => x.IsOpen.Contains(input.IsOpen)).WhereIF(userIds.HasItem(), x => userIds.Contains(x.ShareUserId.Value)).WhereIF(fileInfoIds.HasItem(), x => fileInfoIds.Contains(x.FileInfoId.Value)).WhereIF(input.ShareUserId.HasValue, x => x.ShareUserId == input.ShareUserId).WhereIF(input.Id.HasValue, x => x.Id == input.Id).OrderByDescending(x => x.CreationTime).Select<FileInfoShareDto>().ToPageList(input.Page, input.Size, ref totalCount);
3.2 用户管理模块
用户管理模块支持搜索查询,让用户能够快速找到他们需要的信息,还支持新增用户。除此之外,用户管理模块还支持删除功能,这意味着如果某个用户不再需要使用我们的系统,我们可以方便地将其从系统中移除。支持修改功能,这意味着如果用户的信息发生了改变,或者我们发现用户信息有误,我们都可以及时进行修改,确保系统中的用户信息始终是最新、最准确的。最后,也支持用户信息导出。

关键代码:
var items = DbContext.Queryable<AppUser>().WhereIF(input.IsAuth, x => x.CreatorId == CurrentUser.GetUserId()).WhereIF(input.RoleType.HasValue, x => x.RoleType == input.RoleType.Value).WhereIF(input.UserName.IsNotNullOrNotWhiteSpace(), x => x.UserName.Contains(input.UserName)).WhereIF(input.Name.IsNotNullOrNotWhiteSpace(), x => x.Name.Contains(input.Name)).WhereIF(input.Email.IsNotNullOrNotWhiteSpace(), x => x.Email.Contains(input.Email)).WhereIF(input.PhoneNumber.IsNotNullOrNotWhiteSpace(), x => x.PhoneNumber.Contains(input.PhoneNumber)).Select<AppUserDto>().ToPageList(input.Page, input.Size, ref totalCount);
3.3 文件加密解密模块
文件资源是提供用户进行加密解密的。在文件上传过程中,我们会要求用户输入一个密码,使用密码进行对一个文件进行AES加密。它会检查是否存在一个临时文件(path + ".temp"),如果存在则删除。然后,它会打开原始文件(path)并读取其内容。如果文件长度大于0,它会创建一个新的临时文件(path + ".temp")并将加密后的内容写入该文件。在加密过程中,它会更新进度条。最后,它会删除原始文件并将临时文件重命名为原始文件名。
文件解密是对一个文件进行AES解密。会检查是否存在一个临时文件(path + ".temp"),如果存在则删除。随后,打开原始文件(path)并读取其内容。如果文件长度大于0,它会创建一个新的临时文件(path + ".temp")并将解密后的内容写入该文件。在解密过程中,它会更新进度条。最后,它会删除原始文件并将临时文件重命名为原始文件名。
除了以上的存储和管理功能,还提供了文件删除的功能。如果用户不再需要某个文件,他们可以随时删除它,释放存储空间。

关键代码:
//查询用户所有的文件记录var files = DbContext.Queryable<FileResource>().Where(x => x.UserId == userId).ToList();//得到用户的磁盘var disk=DbContext.Queryable<UserDisk>().First(x => x.UserId == userId);var totalSize = 0.0;foreach (var item in files){var url= item.Url.Replace("\\", "//");var fileName = Path.GetFileName(url);var extension = Path.GetExtension(url);try{// 使用FileStream将输入流写入文件using (WebClient client = new WebClient()){using (Stream stream = client.OpenRead(url)){long sizeInBytes = stream.Length;double sizeInKb = sizeInBytes / 1024.0;totalSize += sizeInKb;}}}catch (Exception ex){ }}disk.UseSize = totalSize;
3.4 文件分享模块
文件分享模块支持查看自己所有分享的文件记录,在这个列表中,我们可以看到文件的名称、有效期、是否公开等信息。还提供了对已分享文件进行管理的功能。我们可以对文件进行修改,这样,我们可以根据实际需求对文件进行整理,使其更符合我们的要求。除了修改文件外,我们还可以选择删除不再需要的已分享文件。在确认后,文件将从我们的分享列表中移除。

关键代码:
//获取一条文件分享记录
var entity = DbContext.Queryable<FileInfoShare>().First(x => x.Id == input.Id);
//如果是空则代表新增
if (entity is null)
{input.Id = 0;entity = input.Clone<FileInfoShareDto, FileInfoShare>();entity = DbContext.Insertable(entity).ExecuteReturnEntity();
}
else
{//否则代表修改entity = input.Clone<FileInfoShareDto, FileInfoShare>();DbContext.Updateable(entity).ExecuteCommand();
}
return entity.Clone<FileInfoShare, FileInfoShareDto>();
3.5 文件分享记录模块
文件分享记录模块允许用户浏览到一个清晰的列表,这个列表详细记录了每一个文件的下载情况。在这个列表中,用户可以观察到文件的名称、下载的人,以及每一次下载的详细信息。这些信息包括了下载者的身份,即谁进行了下载,以及下载行为发生的时间点,这样就能够精确地知道在何时文件被何人访问。
对于那些拥有管理权限的用户来说,文件分享记录模块还提供了额外的功能。例如,如果某些记录不再需要,或者出于隐私保护的目的需要删除,管理员可以方便地对这些记录进行删除操作。

关键代码:
//查询文件分享记录表var items = DbContext.Queryable<FileInfoShareRecord>().WhereIF(input.InputNumber.IsNotNullOrNotWhiteSpace(), x => x.InputNumber.Contains(input.InputNumber)).WhereIF(input.DownTimeRange.HasItem(), x => x.DownTime >= input.DownTimeRange[0] && x.DownTime <= input.DownTimeRange[1]).WhereIF(input.UserId.HasValue, x => x.UserId==input.UserId) .WhereIF(input.Id.HasValue, x => x.Id == input.Id).OrderByDescending(x => x.CreationTime).Select<FileInfoShareRecordDto>().ToPageList(input.Page, input.Size, ref totalCount);foreach (var item in items){item.CreatorAppUserDto = DbContext.Queryable<AppUser>().Where(x => x.Id == item.CreatorId).Select<AppUserDto>().ToList().FirstOrDefault() ?? new AppUserDto();item.FileInfoShareDto = DbContext.Queryable<FileInfoShare>().Where(x => x.Id == item.FileInfoShareId).Select<FileInfoShareDto>().ToList().FirstOrDefault() ?? new FileInfoShareDto();item.UserDto = DbContext.Queryable<AppUser>().Where(x => x.Id == item.UserId).Select<AppUserDto>().ToList().FirstOrDefault() ?? new AppUserDto();item.DownUserDto = DbContext.Queryable<AppUser>().Where(x => x.Id == item.DownUserId).Select<AppUserDto>().ToList().FirstOrDefault() ?? new AppUserDto();item.FileInfoDto = DbContext.Queryable<FileResource>().Where(x => x.Id == item.FileInfoId).Select<FileResourceDto>().ToList().FirstOrDefault() ?? new FileResourceDto();}
3.6 用户磁盘模块
管理员查看用户磁盘是一项关键的系统管理工作,它涉及到对用户磁盘空间的监控和管理。管理员可以查看用户磁盘中存储的大小,以及使用大小。

关键代码:
//查询用户磁盘表var items = DbContext.Queryable<UserDisk>().WhereIF(input.DiskSizeStartRange.HasValue, x =>x.DiskSize>=input.DiskSizeStartRange).WhereIF(input.DiskSizeEndRange.HasValue, x => x.DiskSize<= input.DiskSizeEndRange).WhereIF(input.UseSizeStartRange.HasValue, x =>x.UseSize>=input.UseSizeStartRange).WhereIF(input.UseSizeEndRange.HasValue, x => x.UseSize<= input.UseSizeEndRange).WhereIF(input.Id.HasValue, x => x.Id == input.Id).OrderByDescending(x => x.CreationTime).Select<UserDiskDto>().ToPageList(input.Page, input.Size,ref totalCount);
相关文章:
基于.Net Core+Vue的文件加密系统
1系统架构图 2 用例图 管理员角色的用例: 文件分享大厅:管理员可以访问文件分享大厅,下载文件。个人信息管理:管理员可以更新自己的个人信息,修改密码。用户管理:管理员负责创建、更新或删除用户账户&…...
工业网口相机:如何通过调整网口参数设置,优化图像传输和网络性能,达到最大帧率
项目场景 工业相机是常用与工业视觉领域的常用专业视觉核心部件,拥有多种属性,是机器视觉系统中的核心部件,具有不可替代的重要功能。 工业相机已经被广泛应用于工业生产线在线检测、智能交通,机器视觉,科研,军事科学,航天航空等众多领域 …...
深入理解 Windows Server 的核心功能:现代 IT 架构的基石
深入理解 Windows Server 的核心功能:现代 IT 架构的基石 在现代 IT 基础架构中,Windows Server 一直扮演着不可或缺的角色。它不仅是一个强大的服务器操作系统,更是企业级解决方案的核心支柱。从中小型企业到跨国公司,Windows Server 提供了从身份管理到高可用性的一系列…...
WEB渗透技术研究与安全防御
目录 作品简介I IntroductionII 1 网络面临的主要威胁1 1.1 技术安全1 2 分析Web渗透技术2 2.1 Web渗透技术的概念2 2.2 Web漏洞产生的原因2 2.3 注入测试3 2.3.1 注入测试的攻击流程3 2.3.2 进行一次完整的Sql注入测试4 2.3.3 Cookie注入攻击11 3 安全防御方案设计…...
智能学习平台系统设计与实现(代码+数据库+LW)
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装智能学习平台系统软件来发挥其高效地信息处理的作用&#…...
Java学习,List移动元素
Java实现List中元素的循环移动(即将列表中的元素向右或向左移动指定数量的位置),可以使用多种方法。 List元素移动指定位置: import java.util.ArrayList; import java.util.Collections; import java.util.List; public class…...
Linux-----线程同步(资源竞争和同步锁)
目录 资源竞争(背景) 锁(解决方式,实现同步) 互斥锁 读写锁 自旋锁 资源竞争(背景) 竞态条件 当多个线程并发访问和修改同一个共享资源(如全局变量)时,…...
当当网书籍信息爬虫
1.基本理论 1.1概念体系 网络爬虫又称网络蜘蛛、网络蚂蚁、网络机器人等,可以按照我们设置的规则自动化爬取网络上的信息,这些规则被称为爬虫算法。是一种自动化程序,用于从互联网上抓取数据。爬虫通过模拟浏览器的行为,访问网页…...
React实现拖拽特效
前言 最近,我看到一个工程师的个人网站上,采用了拖拽作品集的互动特效,既有趣又吸引眼球。经过一些研究,我发现其实借助一些现成的套件,就能轻松实现这样的效果。今天就带大家一起看看,如何通过 Framer Mo…...
【竞技宝】LOL:ning直播再次锐评
北京时间1月18日,目前英雄联盟LPL2025正在如火如荼的进行之中,很多队伍都已经打完了新赛季的首场比赛,其中就包括AL战队,AL在休赛期进行了大幅度的人员调整,整体实力相比之前增强了不少,在16日的比赛中,AL3-0轻松击败LGD拿下了赛季开门红,而AL的打野选手tarzan在本场比赛中表现…...
ThreeJS能力演示——界面点选交互能力
1、支持界面点选 点选模型整体思路是:根据camera位置作为起始点,叠加鼠标相对位置作为偏置,摄像头方向作为射线方向。 根据射线方向中的遇到的3D物体列表,第一个遇到的物体作为被点选的物体。 // 鼠标事件处理let selectedObjec…...
flutter的web页面
有几个服务器 有几个后台 直接通过web端进去虽然说很方便,但… 于是把web页面镶嵌到应用里面去, 这样就换了个方式打开web页面了 比如这里有有个列表 这里是写死了,活的列表可以通过io去获取 import package:flutter/material.dart; imp…...
2025.1.17——三、SQLi regexp正则表达式|
题目来源:buuctf [NCTF2019]SQLi1 目录 一、打开靶机,整理信息 二、解题思路 step 1:正常注入 step 2:弄清关键字黑名单 1.目录扫描 2.bp爆破 step 3:根据过滤名单构造payload step 4:regexp正则注…...
虚幻基础2:gameplay框架
能帮到你的话,就给个赞吧 😘 文章目录 ue框架:gameplay组成game modeactorcomponent player controllergame state 工作流程 ue框架:gameplay 组成 game mode 游戏类型和规则。可以控制游戏的开始与结束以及一些其他功能。 ac…...
使用 Go 语言生成样式美观的 PDF 文件
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
鸿蒙-点击Notification通知并打开App的具体页面
意图通知 获取router事件中传递参数并跳转 目前点击通知消息打开应用的指定页面,通过为通知添加行为意图的方式。也就是在wants的parameters中设置自定义参数,然后在UIAbility的onNewWant或者onCreate方法中 解析配置的自定义参数信息判断跳转不同页面&a…...
非科班转码第5年零241天
文章目录 非科班转码第5年零241天第一份工作鸭梨山大同事的帮助第二份工作新公司学到很多出海计划 非科班转码第5年零241天 第一份工作 2019年5月24日,我从机械工程转码后找到第一份工作——图像算法工程师,能得到这份工作纯属偶然,当时公司…...
数据库:MongoDB命令行帮助解释
MongoDB命令: mongodmongosmongoperrormongoexportmongofilesmongoimportmongorestoreMongostat MongoDB包中的核心组件包括: mongod 是 MongoDB 的核心服务器进程,负责数据存储和管理。mongos 是分片集群的路由进程,负责将请求路由到正确…...
MongoDB单机版安装
MongoDB单机版安装 在CentOS Linux release 7.9.2009 (Core)下安装MongoDB的步骤如下: 1 创建用户和组(可选,根据需要) 如果您希望以非root用户运行MongoDB服务,可以创建一个专用的用户和组。 groupadd mongodb us…...
Azure面试
文章目录 项目地址一、Azure Storage1. What are the benefits of Azure Storage? 二、汇总 项目地址 教程作者:教程地址: 代码仓库地址: 所用到的框架和插件: dbt airflow一、Azure Storage 1. What are the bene…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
