iOS 文件分割保存加密

demo只是验证想法,没有做很多异常处理

  • 默认文件是大于1KB的,对于小于1KB的没有做异常处理
  • demo中文件只能分割成2个,可以做成可配置的N个文件分割
  • 拼接还可以使用固定的二进制数据,拼接文件开头或结尾
    • 不论哪种拼法,目的都是使这个文件无法单独使用,必须组合使用,而组合的算法是只有自己知道的
  • 对纯文本的分割,起不到加密的作用,拿到单独的文件还是能拼接处完成内容
    • 思路:1.可以对文本内容进行一次AES加密
    • 2.然后在分割文件,
    • 3.合并文件完成后,
    • 4.在进行AES解密,获取原始内容

外界调用: 

let tool = FIleMergeTool(path: "/Users/zwyl/Desktop/bigImage.png")if let data = tool.divideFile() {let image = UIImage.init(data: data)self.baseImage.image = image
}if let data = tool.mergeFile() {let image = UIImage.init(data: data)self.imageView.image = image
}

核心实现: 

import Foundationclass FIleMergeTool: NSObject {var path: Stringlet prePath = "/Users/zwyl/Desktop/dividerF_file1"let lastPath = "/Users/zwyl/Desktop/dividerF_file2"init(path: String) {self.path = pathsuper.init()}struct Const {// firstOffset 一定要 >= lastBeginstatic let firstOffset = 1024static let lastBegin = 1000}func divideFile() -> Data? {let url = URL(filePath: self.path)let preUrl = URL(filePath: prePath)let lastUrl = URL(filePath: lastPath)let data = try? Data(contentsOf: url)guard let data else {return nil}try? FileManager.default.removeItem(at: preUrl)try? FileManager.default.removeItem(at: lastUrl)// 获取第一部分let preRange = 0 ..< Const.firstOffsetlet preData = data.subdata(in: preRange)try? preData.write(to: preUrl)// 获取第二部分let lastRange = Const.lastBegin ..< data.countlet lastData = data.subdata(in: lastRange)try? lastData.write(to: lastUrl)return data}// 重新读取文件, 拼接Datafunc mergeFile() -> Data? {let preUrl = URL(filePath: self.prePath)let lastUrl = URL(filePath: self.lastPath)let preData = try? Data(contentsOf: preUrl)guard let preData else {return nil}let lastData = try? Data(contentsOf: lastUrl)guard let lastData else {return nil}// 拼接第一段数据var resultData = Data()resultData.append(preData)// 拼接第二段数据let begin = Const.firstOffset - Const.lastBeginlet otherData = lastData.subdata(in: begin ..< lastData.count)resultData.append(otherData)return resultData}
}

删除重复部分后,继续拼接 ,即可得到原始文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/660790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis下载与安装教程(centos下)

文章目录 一&#xff0c;redis下载1.1上传到linux服务器上 二&#xff0c;redis安装2.1 安装依赖2.2 解压包2.3 编译并安装2.4 指定配置启动2.5 设置redis开机自启 一&#xff0c;redis下载 官网&#xff1a; https://redis.io1.1上传到linux服务器上 我用filezila上传到/us…

AUTOSAR内存篇 -FlashDriver(Fls)

文章目录 简介功能介绍通用设计规则外部闪存驱动加载,执行和移除闪存访问代码API介绍类型定义Fls_ConfigTypeFls_AddressTypeFls_LengthType函数定义Fls_InitFls_EraseFls_WriteFls_Cancel

LabVIEW核能设施监测

LabVIEW核能设施监测 在核能领域&#xff0c;确保设施运行的安全性和效率至关重要。LabVIEW通过与硬件的紧密集成&#xff0c;为高温气冷堆燃料装卸计数系统以及脉冲堆辐射剂量监测与数据管理系统提供了解决方案。这些系统不仅提高了监测和管理的精确度&#xff0c;也保证了核…

【编程语言】头文件、源文件、资源文件

头文件、源文件、资源文件是软件开发中常见的文件类型&#xff0c;用于组织和管理代码和资源。 •头文件&#xff08;Header File&#xff09; 是一种包含函数声明、宏定义、类型定义等信息的文件&#xff0c;在源文件中通过#include指令将头文件包含进来&#xff0c;以便能够使…

实时嵌入式:无限阻塞

无限阻塞是指任务在等待某些条件满足时&#xff0c;永远无法继续执行。在多任务或多线程操作系统中&#xff0c;无限阻塞是一个常见问题&#xff0c;可以由多种原因造成。 常见原因 死锁&#xff1a;死锁是指两个或多个任务相互等待对方持有的资源而无法继续执行。在这种情况…

Solidworks 与 MATLAB 联合仿真

本文主要讲解了“MATLAB与SolidWorks的联合仿真怎么实现”&#xff0c;文中的讲解内容简单清晰&#xff0c;易于学习与理解&#xff0c;下面请大家跟着小编的思路慢慢深入&#xff0c;一起来研究和学习“MATLAB与SolidWorks的联合仿真怎么实现”吧&#xff01; 下载插件。 1、…

Pyth 预言机: 它们如何影响Hover?

所有链上借贷市场都使用一种称为“oracle&#xff08;预言机&#xff09;”的服务&#xff0c;为dApp提供代币定价。Oracle是一个数据系统&#xff0c;将链下信息&#xff08;例如KuCoin上的BTC/USDT价格&#xff09;传递到链上合约。从那里&#xff0c;应用程序可以支付一小笔…

react 之 UseMemo

useMemo 看个场景 下面我们的本来的用意是想基于count的变化计算斐波那契数列之和&#xff0c;但是当我们修改num状态的时候&#xff0c;斐波那契求和函数也会被执行&#xff0c;显然是一种浪费 // useMemo // 作用&#xff1a;在组件渲染时缓存计算的结果import { useState …

C#中的WebApi响应Accept头,自动返回xml或者json

Global.asax.cs中的Application_Start方法添加 GlobalConfiguration.Configuration.Formatters.Clear(); GlobalConfiguration.Configuration.Formatters.Add(new XmlMediaTypeFormatter()); GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter())…

红队渗透靶机:LEMONSQUEEZY: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录扫描 1、dirsearch 2、gobuster WEB phpmyadmin wordpress wpscan 登录wordpress 登录phpmyadmin 命令执行 反弹shell 提权 get user.txt 信息收集 本地提权 信息收集 1、arp ┌──(root㉿ru)-[~…

进程间通讯方式

管道: mkfifo 和匿名管道。主要在父子进程上面进行进程间通信比较方便。实际上存储在内核缓存区里面。 无论是匿名管道,还是命名管道,在内核都是一个文件。只要是文件就要有一个 inode。这里我们又用到了特殊 inode、字符设备、块设备,其实都是这种特殊的 inode。 在这种…

CANoe64.exe - 系统错误 找不到VCRUNTIME140_ 1.dll

环境&#xff1a; CANoe12 Win10 专业版 问题描述&#xff1a; CANoe64.exe - 系统错误 找不到VCRUNTIME140_ 1.dll 解决方案&#xff1a; VCRUNTIME140_1.dll是Microsoft Visual C Redistributable for Visual Studio 2015的一部分。它是一个动态链接库&#xff08;DLL&a…

算法价值3-贪心算法

目录 例子1&#xff1a; 问题描述&#xff1a; 算法步骤&#xff1a; 代码&#xff1a; 结果&#xff1a; 例子2&#xff1a; 问题描述&#xff1a; 算法步骤&#xff1a; 代码&#xff1a; 结果&#xff1a; 结论&#xff1a; 贪心算法&#xff08;Greedy Algorith…

响应标头Allow-Headers和Expose-Headers的区别和用法

Access-Control-Allow-Headers和Access-Control-Expose-Headers&#xff0c;简单的说&#xff0c;这两者都是前端和后端之间通过header传递数据的&#xff0c;主要的区别就是方向。 Access-Control-Allow-Headers 举个例子&#xff0c;如果我们前端向后端发起请求&#xff0c…

[网络安全]IIS---FTP服务器 、serverU详解

一 . FTP服务器(File Transfor Protocol) : 协议:文件传输协议 端口号:TCP: 20(数据) / 21(控制) 二 . FTP工作方式: 1.主动模式 : (FTP服务器21端口与FTP客户端产生的随机端口先建立连接 建立连接后,再使用FTP服务器21端口与FTP客户端创建的一个新的随机端口进行发送…

ElementUI安装与使用指南

Element官网-安装指南 提醒一下&#xff1a;下面实例讲解是在Mac系统演示的&#xff1b; 一、开发环境配置 电脑需要先安装好node.js和vue2或者vue3 安装Node.js Node.js 中文网 安装node.js命令&#xff1a;brew install node node.js安装完后&#xff0c;输入&#xff1…

大数据开发之离线数仓项目(用户行为采集平台)(可面试使用)

第 1 章&#xff1a;数据仓库概念 数据仓库&#xff0c;是为企业指定决策&#xff0c;提供数据支持的&#xff0c;可以帮助企业&#xff0c;改进业务流程、提高产品质量等。 数据仓库的输入数据通常包括&#xff1a;业务数据、用户行为数据和爬虫数据等。 业务数据&#xff1a…

pinctrl子系统与gpio子系统实验-对驱动进行测试

一. 简介 前面几篇文章学习了在设备树文件中创建设备节点信息&#xff08;基于gpio子系统与pinctrl子系统&#xff09;&#xff0c;驱动代码的实现。文章地址如下&#xff1a; pinctrl子系统与gpio子系统实验-向设备树文件添加Led设备节点-CSDN博客 pinctrl子系统与gpio子系…

开源:基于Vue3.3 + TS + Vant4 + Vite5 + Pinia + ViewPort适配..搭建的H5移动端开发模板

vue3.3-Mobile-template 基于Vue3.3 TS Vant4 Vite5 Pinia ViewPort适配 Sass Axios封装 vconsole调试工具&#xff0c;搭建的H5移动端开发模板&#xff0c;开箱即用的。 环境要求&#xff1a; Node:16.20.1 pnpm:8.14.0 必须装上安装pnpm&#xff0c;没装的看这篇…

使用ChatGPT学习大象机器人六轴协作机械臂mechArm

引言 我是一名机器人方向的大学生&#xff0c;近期学校安排自主做一个机器人方面相关的项目。学校给我们提供了一个小型的六轴机械臂&#xff0c;mechArm 270M5Stack&#xff0c;我打算使用ChatGPT让它来辅助我学习如何使用这个机械臂并且做一个demo。 本篇文章将记录我是如何使…