0

我有一个大约 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 关闭文件];

我在这里面临的问题是我已经(1MB+ DummyBytes)加密并且当我解密 1MB+ DummyBytes 时,我得到大约 0.9MB(解密字节)。

所以我的问题仍然存在(0.9MB+一些不需要的字节+未加密的字节)。

有关如何克服的建议将很有帮助。

4

2 回答 2

2

我假设您的目标是避免将整个文件读入内存,对吗?有两种解决方案,具体取决于您要如何攻击它:

首先是内存映射文件。请记住,标题的大小不能更改。

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


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

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

于 2012-02-06T20:34:20.613 回答
0

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

- (NSData *)subdataWithRange:(NSRange)range;
于 2012-02-06T18:19:36.050 回答