Множественное шифрование добавляется к файлу

У меня есть журнал состояния программ. Этот журнал может быть сохранен вручную или через временной интервал в файле для постоянного хранения. Перед сохранением в файл он шифруется с помощью RNCryptor.

Мое текущее добавление (сохранение) к потоку файлов:

  1. Прочитать файл
  2. Расшифровать информацию из прочитанной строки
  3. Объединить расшифрованную строку с новой строкой
  4. Зашифровать объединенную строку
  5. Запишите это в файл

Что я себе представляю:

  1. Кодировать новую строку
  2. Добавить в файл

Когда я прочитаю это, мне придется построить строку из всех закодированных строк. Но я не знаю, как расшифровать файл с несколькими зашифрованными блоками. Как отличить, где кончается одно и начинается другое. Также это лучший выбор производительности. Максимальный размер текста в файле может достигать 100 МБ (возможно, он никогда не станет таким большим). Эффективно ли использование Основных данных? Каждое добавление как отдельная запись или что-то в этом роде. И основные данные могут быть зашифрованы, поэтому нет необходимости в RNCryptor.

Был бы признателен за код в Objective-C, если таковой имеется.


person h3dkandi    schedule 01.04.2016    source источник


Ответы (2)


Есть много вещей, которые вы можете сделать:

  • Проще всего было бы кодировать зашифрованные тексты в текст (например, с помощью Base64) и записывать каждый закодированный зашифрованный текст в новую строку. Для этого вам нужна кодировка, потому что сам зашифрованный текст может содержать байты, которые можно интерпретировать как управляющие символы новой строки, но этого не произойдет с текстовой кодировкой. Проблема с этим заключается в том, что он излишне увеличивает журналы (например, на 33%, если используется Base64).

  • Вы можете добавить к каждому незакодированному зашифрованному тексту его длину (например, кодировку int32 с обратным порядком байтов) и записать оба как есть в файл в двоичном режиме. Если вы начнете читать файл с самого начала, вы сможете различить каждый зашифрованный текст, потому что вы знаете, какой длины следующий зашифрованный текст и когда начинается следующая закодированная длина. Раздутие равно размеру кодирования длины зашифрованного текста для каждого зашифрованного текста.

  • Используйте двоичный разделитель, такой как 0x0101, между зашифрованными текстами, но такой разделитель все еще может появляться в зашифрованных текстах, поэтому вам нужно экранировать его, если вы найдете его где-то в зашифрованном тексте. Это немного сложно сделать правильно.

  • Если объем журналов небольшой (несколько МБ), вы можете найти библиотеку для добавления в ZIP-файл.

person Artjom B.    schedule 01.04.2016
comment
спасибо за предложения. Думаю, я соглашусь либо со вторым, либо с последним пунктом. - person h3dkandi; 01.04.2016