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

基于.Net Core+Vue的文件加密系统

1系统架构图

2 用例图

管理员角色的用例:

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

用户角色的用例:

  1. 文件分享大厅:用户可以访问文件分享大厅,浏览可分享的文件,以及下载分享文件。
  2. 文件资源管理:用户可以管理自己上传的文件,执行上传、加密、解密、删除等操作。
  3. 文件分享管理:用户可以查看自己分享的文件,监控分享文件,可以对分享的文件进行删除,修改。
  4.       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 用例图 管理员角色的用例&#xff1a; 文件分享大厅&#xff1a;管理员可以访问文件分享大厅&#xff0c;下载文件。个人信息管理&#xff1a;管理员可以更新自己的个人信息&#xff0c;修改密码。用户管理&#xff1a;管理员负责创建、更新或删除用户账户&…...

工业网口相机:如何通过调整网口参数设置,优化图像传输和网络性能,达到最大帧率

项目场景 工业相机是常用与工业视觉领域的常用专业视觉核心部件&#xff0c;拥有多种属性&#xff0c;是机器视觉系统中的核心部件&#xff0c;具有不可替代的重要功能。 工业相机已经被广泛应用于工业生产线在线检测、智能交通,机器视觉,科研,军事科学,航天航空等众多领域 …...

深入理解 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)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装智能学习平台系统软件来发挥其高效地信息处理的作用&#…...

Java学习,List移动元素

Java实现List中元素的循环移动&#xff08;即将列表中的元素向右或向左移动指定数量的位置&#xff09;&#xff0c;可以使用多种方法。 List元素移动指定位置&#xff1a; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class…...

Linux-----线程同步(资源竞争和同步锁)

目录 资源竞争&#xff08;背景&#xff09; 锁&#xff08;解决方式&#xff0c;实现同步&#xff09; 互斥锁 读写锁 自旋锁 资源竞争&#xff08;背景&#xff09; 竞态条件 当多个线程并发访问和修改同一个共享资源&#xff08;如全局变量&#xff09;时&#xff0c;…...

当当网书籍信息爬虫

1.基本理论 1.1概念体系 网络爬虫又称网络蜘蛛、网络蚂蚁、网络机器人等&#xff0c;可以按照我们设置的规则自动化爬取网络上的信息&#xff0c;这些规则被称为爬虫算法。是一种自动化程序&#xff0c;用于从互联网上抓取数据。爬虫通过模拟浏览器的行为&#xff0c;访问网页…...

React实现拖拽特效

前言 最近&#xff0c;我看到一个工程师的个人网站上&#xff0c;采用了拖拽作品集的互动特效&#xff0c;既有趣又吸引眼球。经过一些研究&#xff0c;我发现其实借助一些现成的套件&#xff0c;就能轻松实现这样的效果。今天就带大家一起看看&#xff0c;如何通过 Framer Mo…...

【竞技宝】LOL:ning直播再次锐评

北京时间1月18日,目前英雄联盟LPL2025正在如火如荼的进行之中,很多队伍都已经打完了新赛季的首场比赛,其中就包括AL战队,AL在休赛期进行了大幅度的人员调整,整体实力相比之前增强了不少,在16日的比赛中,AL3-0轻松击败LGD拿下了赛季开门红,而AL的打野选手tarzan在本场比赛中表现…...

ThreeJS能力演示——界面点选交互能力

1、支持界面点选 点选模型整体思路是&#xff1a;根据camera位置作为起始点&#xff0c;叠加鼠标相对位置作为偏置&#xff0c;摄像头方向作为射线方向。 根据射线方向中的遇到的3D物体列表&#xff0c;第一个遇到的物体作为被点选的物体。 // 鼠标事件处理let selectedObjec…...

flutter的web页面

有几个服务器 有几个后台 直接通过web端进去虽然说很方便&#xff0c;但… 于是把web页面镶嵌到应用里面去&#xff0c; 这样就换了个方式打开web页面了 比如这里有有个列表 这里是写死了&#xff0c;活的列表可以通过io去获取 import package:flutter/material.dart; imp…...

2025.1.17——三、SQLi regexp正则表达式|

题目来源&#xff1a;buuctf [NCTF2019]SQLi1 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;正常注入 step 2&#xff1a;弄清关键字黑名单 1.目录扫描 2.bp爆破 step 3&#xff1a;根据过滤名单构造payload step 4&#xff1a;regexp正则注…...

虚幻基础2:gameplay框架

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 ue框架&#xff1a;gameplay组成game modeactorcomponent player controllergame state 工作流程 ue框架&#xff1a;gameplay 组成 game mode 游戏类型和规则。可以控制游戏的开始与结束以及一些其他功能。 ac…...

使用 Go 语言生成样式美观的 PDF 文件

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

鸿蒙-点击Notification通知并打开App的具体页面

意图通知 获取router事件中传递参数并跳转 目前点击通知消息打开应用的指定页面&#xff0c;通过为通知添加行为意图的方式。也就是在wants的parameters中设置自定义参数&#xff0c;然后在UIAbility的onNewWant或者onCreate方法中 解析配置的自定义参数信息判断跳转不同页面&a…...

非科班转码第5年零241天

文章目录 非科班转码第5年零241天第一份工作鸭梨山大同事的帮助第二份工作新公司学到很多出海计划 非科班转码第5年零241天 第一份工作 2019年5月24日&#xff0c;我从机械工程转码后找到第一份工作——图像算法工程师&#xff0c;能得到这份工作纯属偶然&#xff0c;当时公司…...

数据库:MongoDB命令行帮助解释

MongoDB命令&#xff1a; mongodmongosmongoperrormongoexportmongofilesmongoimportmongorestoreMongostat MongoDB包中的核心组件包括: mongod 是 MongoDB 的核心服务器进程&#xff0c;负责数据存储和管理。mongos 是分片集群的路由进程&#xff0c;负责将请求路由到正确…...

MongoDB单机版安装

MongoDB单机版安装 在CentOS Linux release 7.9.2009 (Core)下安装MongoDB的步骤如下&#xff1a; 1 创建用户和组&#xff08;可选&#xff0c;根据需要&#xff09; 如果您希望以非root用户运行MongoDB服务&#xff0c;可以创建一个专用的用户和组。 groupadd mongodb us…...

Azure面试

文章目录 项目地址一、Azure Storage1. What are the benefits of Azure Storage&#xff1f; 二、汇总 项目地址 教程作者&#xff1a;教程地址&#xff1a; 代码仓库地址&#xff1a; 所用到的框架和插件&#xff1a; dbt airflow一、Azure Storage 1. What are the bene…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...