Вопрос по xcode, ios, objective-c, pdf, encryption – XOR или другой простой способ обфускации файла - цель c

3

Я работаю над приложением IOS, которое использует защищенные авторским правом файлы PDF. Я ищу несколько простых способов скрыть файлы для обеспечения безопасности, которые не требуют от меня прохождения дополнительного процесса проверки шифрования CCATS на массовом рынке, но также гарантируют, что владельцы авторских прав, которые я сделал, сделали все возможное, чтобы сохранить их данные в безопасности. Конечно, я защищаю файлы паролем, но хочу сделать еще один или два шага. Существует ли простой способ XOR или иного хеширования или обфускации файла PDF, который я размещаю на моем сервере, затем загрузите его с устройства ios и восстановите его в обычный файл PDF, защищенный паролем, с использованием кода Objective-C, чтобы он мог сохранить он находится в каталоге документов (я не беспокоюсь о его безопасности на устройстве так же, как когда он находится на сервере). Я предполагаю, что это будет то же самое для любого типа файла.

Поэтому для пояснения я ищу простой метод XOR или Hash obfuscation / encryption на моем рабочем столе, имеющий соответствующий целевой код c, который устройство ios может использовать для быстрого декодирования моих файлов после загрузки и сохранения его в каталоге документов.

Спасибо!

вот ответ об ограничениях CCATS для справки ... Нужно подать заявку на CCATS, если используется простой XOR-шифр?

Вам действительно нужны CCATS, если вы просто хотите защитить свой IP? Кажется, есть исключение, если вы используете шифрование для защиты IP (= материал, защищенный авторским правом). AlexR

Ваш Ответ

1   ответ
6

Как бы вы ни загружали файл, вы, вероятно, в конечном итоге получилиNSData? Если это так, то где бы вы ни находились, например, так:

[myData writeToFile:...]

Просто пройдите все байты и примените свой XOR. Предположим, это был плотный 8-битный шаблон, который просто будет:

/* assuming myData is mutable... take [data mutableCopy] if required */
uint8_t *bytes = (uint8_t *)[myData mutableBytes];

for(int index = 0; index < [myData length]; index++)
    bytes[index] ^= 0xe8; // or whatever your mask is

Что предлагает наиболее тривиальный способ применения более длинного паттерна:

uint8_t *bytes = (uint8_t *)[myData mutableBytes];
uint8_t pattern[] = {0xe8, 0xf4, 0x98, 0x32, 0x63}; // or whatever
const int patternLengthInBytes = 5;

for(int index = 0; index < [myData length]; index++)
    bytes[index] ^= pattern[index % patternLengthInBytes];

Было бы немного быстрее выполнить 32-битные шаги, но сохранение на диск, вероятно, будет единственной вещью, которая имеет какую-либо значительную стоимость и которая, по крайней мере, очень ясна.

Как примечание, он не понравился «mutableBytes», но «байтами»; сработало просто отлично, и я изменил ссылку для цикла for на меньшее значение для времени, но это дало мне тот же эффект, что я не увидел pdf в сети, чтобы его увидел весь мир. Еще раз спасибо! texian
это здорово, с приложением какао, я получил его, чтобы сделать это волшебство и сохранить на рабочем столе. это занимает немного времени для этих файлов размером 1 МБ, но я думаю, что могу исправить длину шаблона или частично изменить его, чтобы это исправить. Глупый вопрос, но, поскольку для его возврата требуется xor, используйте тот же метод (по сути, снова запустив этот метод для данных)? texian
NSMutableData имеетmutableBytes, но стандартNSData Безразлично & APOS; т. Вы не должны изменять данные, к которым вы получаете доступ черезbytesпоэтому, если вы видите какое-либо странное поведение, как сейчас, так и в отношении будущих версий ОС, это, вероятно, было бы разумным первым делом, чтобы проверить.
Спасибо за разъяснения! Я просто буду использоватьNSMutableData. texian

Похожие вопросы