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.hqwc.cn/news/437825.html

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

相关文章

防御保护--NAT策略

目录 NAT策略 NAT类型 server-map表 P2P --- peer to peer 网络类型 ​编辑 目标NAT--服务器映射 双向NAT ​编辑 多出口NAT NAT策略 静态NAT --- 一对一 动态NAT --- 多对多 NAPT --- 一对多的NAPT --- easy ip --- 多对多NAPT 服务器映射 源NAT--基于源IP地址进行转…

GIS应用水平考试一级—2009 年度第二次

全国信息化工程师——GIS应用水平考试 2009 年度第二次全国统一考试一级 试卷说明: 1、本试卷共9页,6个大题,满分150 分,150 分钟完卷。 2、考试方式为闭卷考试。 3、将第一、二、三題的答案用铅笔涂写到(NCIE-GIS)答题卡上。 4、将第四、五、六题的答案填写到主观题答题卡上…

《HTML 简易速速上手小册》第1章:HTML 入门(2024 最新版)

文章目录 1.1 HTML 简介与历史&#xff08;&#x1f609;&#x1f310;&#x1f47d;踏上神奇的网页编程之旅&#xff09;1.1.1 从过去到现在的华丽蜕变1.1.2 市场需求 —— HTML的黄金时代1.1.3 企业中的实际应用 —— 不只是个网页1.1.4 职业前景 —— 未来属于你 1.2 基本 H…

千川投流怎么涨粉的?巨量千川粉丝是怎么投流的呢?

在当今数字时代&#xff0c;流量已经成为了一个品牌或产品成功与否的关键因素。因此&#xff0c;千川投流作为一种有效的涨粉引流推广方法&#xff0c;已经成为了许多品牌和产品的首选。本文将向您详细介绍千川投流涨粉引流推广方法&#xff0c;帮助您实现粉丝数量的暴涨目标。…

数据可视化工具JSON Crack结合内网穿透实现公网访问

文章目录 1. 在Linux上使用Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 JSON Crack 是一款免费的开源数据可视化应用程序&#xff0c;能够将 JSON、YAML、XML、CSV 等数据格式可视化为交互…

Zerosync:构建基于STARK的Bitcoin证明系统

1. 引言 前序博客&#xff1a; BitcoinSTARK: ZeroSync & Khepri Robin Linus、Tino Steffens、Lukas George 等人成立了一个名为 ZeroSync 协会&#xff08;ZeroSync Association&#xff09;的瑞士非营利组织&#xff0c;该组织将牵头开发比特币证明系统。ZeroSync 于…

智慧文旅:重塑旅游业的商业模式与未来

随着科技的飞速发展和消费者需求的不断演变&#xff0c;旅游业正经历着前所未有的变革。智慧文旅&#xff0c;作为这场变革的核心驱动力&#xff0c;正在逐步重塑旅游业的商业模式和未来。本文将深入探讨智慧文旅如何改变传统旅游业的格局&#xff0c;并展望其未来的发展趋势。…

pytest的内置插件盘点7:python

本文系《pytest源码剖析》系列内容 正在连载&#xff0c;欢迎关注 7. 内置插件 python 插件路径&#xff1a;_pytest.python 实现的 hook hooktryfirsttrylastoptionalhookhookwrapperwrapperpytest_addoptionFalseFalseFalseFalseFalsepytest_cmdline_mainFalseFalseFalseFal…

SQL注入:二次注入

SQL注入系列文章&#xff1a; 初识SQL注入-CSDN博客 SQL注入&#xff1a;联合查询的三个绕过技巧-CSDN博客 SQL注入&#xff1a;报错注入-CSDN博客 SQL注入&#xff1a;盲注-CSDN博客 目录 什么是二次注入&#xff1f; 二次注入演示 1、可以注册新用户 2、可以登录->…

【算法与数据结构】139、LeetCode单词拆分

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题可以看做一个动态规划问题。其中&#xff0c;字符串s是背包&#xff0c;而字典中的单词就是物品。…

【C语言/数据结构】排序(快速排序及多种优化|递归及非递归版本)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 ​​​​ 目录 交换排序 快速排序 hoare版代…

14.java集合

文章目录 概念Collection 接口概念示例 Iterator 迭代器基本操作&#xff1a;并发修改异常增强循环遍历数组&#xff1a;遍历集合&#xff1a;遍历字符串&#xff1a;限制 list接口ListIteratorArrayList创建 ArrayList&#xff1a;添加元素&#xff1a;获取元素&#xff1a;修…