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
    }
}

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

相关推荐
HarderCoder12 小时前
iOS 知识积累第一弹:从 struct 到 APP 生命周期的全景复盘
ios
叽哥1 天前
Flutter Riverpod上手指南
android·flutter·ios
用户092 天前
SwiftUI Charts 函数绘图完全指南
ios·swiftui·swift
YungFan2 天前
iOS26适配指南之UIColor
ios·swift
权咚3 天前
阿权的开发经验小集
git·ios·xcode
用户093 天前
TipKit与CloudKit同步完全指南
ios·swift
法的空间3 天前
Flutter JsonToDart 支持 JsonSchema
android·flutter·ios
2501_915918413 天前
iOS 上架全流程指南 iOS 应用发布步骤、App Store 上架流程、uni-app 打包上传 ipa 与审核实战经验分享
android·ios·小程序·uni-app·cocoa·iphone·webview
00后程序员张3 天前
iOS App 混淆与加固对比 源码混淆与ipa文件混淆的区别、iOS代码保护与应用安全场景最佳实践
android·安全·ios·小程序·uni-app·iphone·webview
Magnetic_h3 天前
【iOS】设计模式复习
笔记·学习·ios·设计模式·objective-c·cocoa