Шифрование потокового контента в постоянном хранилище и дешифрование в поток на iPhone - PullRequest
1 голос
/ 16 июля 2010

Мое приложение «потоковое» содержимое (файлы фиксированного размера, следовательно, кавычки) с HTTP-сервера в локальный файл.Затем есть другой компонент приложения, который открывает тот же файл и отображает его (воспроизводит).

Это делается для целей кэширования, поэтому, когда тот же файл запрашивается в следующий раз, он больше не будет нуждатьсядля загрузки с сервера.

Спецификация приложения требует, чтобы весь локальный контент был зашифрован (даже с самым легким шифрованием)

Вопрос: было ли сделано какое-либоработать, позволяя просто перенаправить поток в библиотеку, которая затем сохранит зашифрованный поток в файл?И затем, когда я запрашиваю поток из локального файла, библиотека возвращает расшифрованный поток «на лету»?

Я искал решение без результатов до сих пор

Спасибо

Ответы [ 2 ]

2 голосов
/ 20 августа 2010

В итоге я написал собственное решение, которое использует шифрование RC4 из встроенной библиотеки Crypt.Это было удивительно просто.В основном это было связано с созданием функции, которая шифрует / дешифрует фрагменты NSData, а затем читает / записывает эти фрагменты в файлы ... Вот функция, которая выполняет шифрование на случай, если кому-то это интересно:

- (NSData*)RC4EncryptDecryptWithKey:(NSString *)key operation:(CCOperation)operation
{
        // convert to C string..
        int keySize = [key length];
        char keyPtr[keySize];
        bzero(keyPtr, sizeof(keyPtr));
        [key getCString:keyPtr
              maxLength:sizeof(keyPtr)
               encoding:NSUTF8StringEncoding];

        // encode/decode
        NSUInteger dataLength = [self length];
        size_t bufferSize = dataLength;
        void *buffer = malloc(bufferSize);

        size_t numBytesOut = 0;
        CCCryptorStatus cryptStatus = CCCrypt(operation,
                                              kCCAlgorithmRC4,
                                              kCCOptionECBMode,
                                              keyPtr,
                                              8,
                                              NULL,
                                              [self bytes],
                                              dataLength,
                                              buffer,
                                              bufferSize,
                                              &numBytesOut);
        if (cryptStatus == kCCSuccess) {
                return [NSData dataWithBytesNoCopy:buffer
                                            length:numBytesOut
                                      freeWhenDone:YES];
        }

        free(buffer);
        return nil;
}

- (NSData*)RC4EncryptWithKey:(NSString*)key {
   return [self RC4EncryptDecryptWithKey:key operation:kCCEncrypt];
}

- (NSData*)RC4DecryptWithKey:(NSString*)key {
   return [self RC4EncryptDecryptWithKey:key operation:kCCDecrypt];
}

Очевидно, одинможет создать что-то более безопасное (например, AES) или что-то еще (на самом деле я использовал примеры других оболочек шифрования, чтобы написать этот)

0 голосов
/ 16 июля 2010

Я бы не стал беспокоиться о шифровании только потому, что Apple так говорит.

Сделайте так, как вы хотите (без шифрования, похоже) и отправьте на утверждение. Если одобрено, ты в порядке. Если нет, то беспокойтесь об этом. Если ваш дизайн требует от вас принятия решения сейчас, ваш дизайн может быть ошибочным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...