修改文件iOS中的数据(字节)

时间:2012-02-06 17:56:57

标签: iphone objective-c ios nsdata nsfilehandle

我有一个大约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 +一些不需要的字节+未加密的字节)。

有关如何克服的建议会有所帮助。

2 个答案:

答案 0 :(得分:2)

我认为你的目标是避免将整个文件读入内存,对吗?根据您的攻击方式,有两种解决方案:

首先是memory mapped file。请记住,标题的大小不能更改。

或者,您可以按照建议使用NSFileHandle。打开它以“更新”,寻找文件的开头,并写入新的字节。然后关闭。同样,标题的大小不能改变。


您的编辑建议您尝试“压缩”文件以删除“不需要的字节”。如果不重写文件,这是不可能的。 iPhone文件系统没有从除文件末尾之外的任何地方删除数据的机制。

最好的解决方案通常是在首先编写标题之前解密标题。或修改您的阅读算法以跳过不需要的字节。

答案 1 :(得分:0)

您是否尝试使用以下功能?它可以帮助您摆脱标头字节。然后,您可以在变量中包含解密的字节,并附加后者的值。

- (NSData *)subdataWithRange:(NSRange)range;