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 Foundation

class FIleMergeTool: NSObject {

    var path: String
    let prePath = "/Users/zwyl/Desktop/dividerF_file1"
    let lastPath = "/Users/zwyl/Desktop/dividerF_file2"

    init(path: String) {
        self.path = path
        super.init()
    }

    struct Const {
        // firstOffset 一定要 >= lastBegin
        static let firstOffset = 1024
        static 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.firstOffset
        let preData = data.subdata(in: preRange)
        try? preData.write(to: preUrl)

        // 获取第二部分
        let lastRange = Const.lastBegin ..< data.count
        let lastData = data.subdata(in: lastRange)
        try? lastData.write(to: lastUrl)

        return data
    }

    // 重新读取文件, 拼接Data
    func 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.lastBegin
        let otherData = lastData.subdata(in: begin ..< lastData.count)
        resultData.append(otherData)
        return resultData
    }
}

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

相关推荐
游戏开发爱好者87 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
黑码哥8 小时前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
2501_915106329 小时前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview
2501_915106329 小时前
使用 Sniffmaster TCP 抓包和 Wireshark 网络分析
网络协议·tcp/ip·ios·小程序·uni-app·wireshark·iphone
熊猫钓鱼>_>10 小时前
移动端开发技术选型报告:三足鼎立时代的开发者指南(2026年2月)
android·人工智能·ios·app·鸿蒙·cpu·移动端
徐同保1 天前
通过ip访问nginx的服务时,被第一个server重定向了,通过设置default_server解决这个问题
ios·iphone
2501_915918411 天前
在 iOS 环境下查看 App 详细信息与文件目录
android·ios·小程序·https·uni-app·iphone·webview
2501_916007471 天前
没有 Mac 用户如何上架 App Store,IPA生成、证书与描述文件管理、跨平台上传
android·macos·ios·小程序·uni-app·iphone·webview
夏幻灵2 天前
HTTPS全面解析:原理、加密机制与证书体
ios·iphone
TheNextByte12 天前
如何在iPhone上恢复已删除的笔记的综合指南
笔记·ios·iphone