Модификация данных (байтов) в файле iOS - PullRequest
0 голосов
/ 06 февраля 2012

У меня есть огромный зашифрованный файл (mp4) около 700 МБ.Заголовок файла зашифрован примерно (1 МБ + фиктивные байты).Расшифровка этого файла выполнена успешно.

Теперь я хочу удалить (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,9 МБ (дешифрованные байты).

Так что моя проблема все еще сохраняется (0,9 МБ + некоторые нежелательные байты + незашифрованные байты).

Предложения по преодолению будут полезны.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

Полагаю, ваша цель - не читать весь файл в память, верно?Есть два решения, в зависимости от того, как вы хотите атаковать:

Сначала будет файл с отображением памяти .Имейте в виду, что размер заголовка не может измениться.

В качестве альтернативы, вы можете использовать NSFileHandle, как вы предлагаете.Откройте его для «обновления», найдите начало файла и запишите новые байты.Тогда закрой.Опять же, размер заголовка не может измениться.


Ваша правка предполагает, что вы пытаетесь «сжать» файл, чтобы удалить «нежелательные байты».Это невозможно без переписывания файла.Файловая система iPhone не имеет механизма удаления данных из любого места, кроме конца файла.

Лучшим решением, как правило, является расшифровка заголовка перед его записью.Или изменив алгоритм чтения, чтобы пропустить ненужные байты.

0 голосов
/ 06 февраля 2012

Вы пробовали использовать функцию ниже?Это может помочь вам избавиться от байтов заголовка.Затем вы можете иметь расшифрованные байты в переменной и добавить значение последней.

- (NSData *)subdataWithRange:(NSRange)range;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...