当前位置:   article > 正文

iOS 文件分割保存加密

iOS 文件分割保存加密

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

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

外界调用: 

  1. let tool = FIleMergeTool(path: "/Users/zwyl/Desktop/bigImage.png")
  2. if let data = tool.divideFile() {
  3. let image = UIImage.init(data: data)
  4. self.baseImage.image = image
  5. }
  6. if let data = tool.mergeFile() {
  7. let image = UIImage.init(data: data)
  8. self.imageView.image = image
  9. }

核心实现: 

  1. import Foundation
  2. class FIleMergeTool: NSObject {
  3. var path: String
  4. let prePath = "/Users/zwyl/Desktop/dividerF_file1"
  5. let lastPath = "/Users/zwyl/Desktop/dividerF_file2"
  6. init(path: String) {
  7. self.path = path
  8. super.init()
  9. }
  10. struct Const {
  11. // firstOffset 一定要 >= lastBegin
  12. static let firstOffset = 1024
  13. static let lastBegin = 1000
  14. }
  15. func divideFile() -> Data? {
  16. let url = URL(filePath: self.path)
  17. let preUrl = URL(filePath: prePath)
  18. let lastUrl = URL(filePath: lastPath)
  19. let data = try? Data(contentsOf: url)
  20. guard let data else {
  21. return nil
  22. }
  23. try? FileManager.default.removeItem(at: preUrl)
  24. try? FileManager.default.removeItem(at: lastUrl)
  25. // 获取第一部分
  26. let preRange = 0 ..< Const.firstOffset
  27. let preData = data.subdata(in: preRange)
  28. try? preData.write(to: preUrl)
  29. // 获取第二部分
  30. let lastRange = Const.lastBegin ..< data.count
  31. let lastData = data.subdata(in: lastRange)
  32. try? lastData.write(to: lastUrl)
  33. return data
  34. }
  35. // 重新读取文件, 拼接Data
  36. func mergeFile() -> Data? {
  37. let preUrl = URL(filePath: self.prePath)
  38. let lastUrl = URL(filePath: self.lastPath)
  39. let preData = try? Data(contentsOf: preUrl)
  40. guard let preData else {
  41. return nil
  42. }
  43. let lastData = try? Data(contentsOf: lastUrl)
  44. guard let lastData else {
  45. return nil
  46. }
  47. // 拼接第一段数据
  48. var resultData = Data()
  49. resultData.append(preData)
  50. // 拼接第二段数据
  51. let begin = Const.firstOffset - Const.lastBegin
  52. let otherData = lastData.subdata(in: begin ..< lastData.count)
  53. resultData.append(otherData)
  54. return resultData
  55. }
  56. }

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/43274
推荐阅读
相关标签
  

闽ICP备14008679号