我有一个大约700MB的巨大加密文件(mp4)。文件头部加密(1MB +虚拟字节)。该文件的解密成功完成。
现在我要删除文件中的(1MB +虚拟)加密字节(同一文件)&用解密的字节替换它们。
我怎样才能达到同样的目标? 在这方面的任何帮助将不胜感激。提前谢谢。
NSFileHandle *encVideoFile=[NSFileHandle fileHandleForUpdatingAtPath:**encVideoFilePath**];
//the data is read from file by using readDataOfLength method & decrypted (decryptedData).
[encVideoFile seekToFileOffset:0];
[encVideoFile writeData:decryptedData];
[encVideoFile closeFile];
我面临的问题是我(1MB + DummyBytes)加密和放大当我解密1MB + DummyBytes时,我得到0.9MB(解密字节)。
所以我的问题仍然存在(0.9MB +一些不需要的字节+未加密的字节)。
有关如何克服的建议会有所帮助。
答案 0 :(得分:2)
我认为你的目标是避免将整个文件读入内存,对吗?根据您的攻击方式,有两种解决方案:
首先是memory mapped file。请记住,标题的大小不能更改。
或者,您可以按照建议使用NSFileHandle
。打开它以“更新”,寻找文件的开头,并写入新的字节。然后关闭。同样,标题的大小不能改变。
您的编辑建议您尝试“压缩”文件以删除“不需要的字节”。如果不重写文件,这是不可能的。 iPhone文件系统没有从除文件末尾之外的任何地方删除数据的机制。
最好的解决方案通常是在首先编写标题之前解密标题。或修改您的阅读算法以跳过不需要的字节。
答案 1 :(得分:0)
您是否尝试使用以下功能?它可以帮助您摆脱标头字节。然后,您可以在变量中包含解密的字节,并附加后者的值。
- (NSData *)subdataWithRange:(NSRange)range;