2012-02-06 18 views
0

我有一個大約700MB的巨大加密文件(mp4)。文件頭部被加密(1MB +虛擬字節)。該文件的解密已成功完成。修改文件中的數據(字節)iOS

現在我想刪除文件(相同文件)中的(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)加密&當我Decrypt 1MB + DummyBytes我得到0.9MB左右(解密字節)。

因此,我的問題仍然存在(0.9MB +一些不需要的字節+未加密的字節)。

關於如何克服的建議將會有所幫助。

回答

0

您是否嘗試過使用下面的函數?它可以幫助您擺脫標題字節。然後,您可以將解密的字節存儲在一個變量中,並附加後者的值。

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

我假設你的目標是避免將整個文件讀入內存,對嗎?有兩種解決方案,具體取決於你想如何攻擊它:

首先是memory mapped file。請記住,標題的大小不能改變。

或者,您可以按照您的建議使用NSFileHandle。打開它進行「更新」,尋找文件的開頭,然後寫入新的字節。然後關閉。同樣,標題的大小也不能改變。


您的編輯建議您試圖「壓縮」該文件以刪除「不需要的字節」。如果不重寫該文件,這是不可能的。 iPhone文件系統沒有從除文件末尾以外的任何地方除去數據的機制。

最好的解決方案通常是先解密頭部,然後再寫入頭部。或者修改您的閱讀算法以跳過不需要的字節。

+0

謝謝。我使用NSFileHandler,但在解密數據(字節)寫入文件(代碼已在我的問題中更新)後,我遇到了一個問題。請幫我解決這個問題。 – 2012-02-07 07:38:07