2010-07-16 1 views
1

HTTP 서버의 내 응용 프로그램 "스트림"콘텐츠 (고정 크기 파일, 따옴표)가 로컬 파일에 저장됩니다. 그런 다음 동일한 파일을 열고 표시합니다 (재생) 앱의 다른 구성 요소가 있습니다.지속적인 저장 장치에 콘텐츠 스트리밍 암호화 및 iPhone의 스트림에 대한 암호 해독

이것은 캐싱 목적으로 수행되므로 다음에 동일한 파일을 요청할 때 더 이상 서버에서 다운로드 할 필요가 없습니다. 하나는 단순히 라이브러리에 스트림을 리디렉션 할 수 있도록 모든 작업이 완료 된 후 것입니다 :

앱의 스펙 모든 로컬 내용이 질문

(심지어 가장 가벼운 무게 암호화) 암호화해야 파일로 암호화 된 스트림을 저장 하시겠습니까? 그런 다음 로컬 파일에서 스트림을 요청하면 라이브러리는 해독 된 스트림에서 스트림을 반환합니다. 내가 지금까지 아무 결과 해결책을

감사

+0

무언가를 암호화하는 것은 매우 어리석은 것 같습니다 (다운로드 할 데이터가 필요없는 것처럼 들립니다. 안전해야한다). 사과 사양에서 모든 로컬 데이터를 암호화해야한다고 말하는 곳은 어디입니까? – shookster

+0

사과 사양이 아니지만 고객의 요구 사항 : ( – Nick

+0

이 도움이 되나요? https://nickharris.wordpress.com/2010/07/14/core-data-and-enterprise-iphone-applications-protecting-your-data/ – shookster

답변

2

내장 된 Crypt 라이브러리의 RC4 암호화를 사용하는 사용자 지정 솔루션을 작성했습니다. 그것은 놀라 울 정도로 똑바로되었습니다. 기본적으로 여기 경우 다른 사람의 암호화 관심이 수행하는 기능은 .../파일에 그 덩어리를 읽기/쓰기 다음을 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 등) 또는 무엇이든 (실제로이 암호를 쓰는 다른 암호화 래퍼의 예를 사용했습니다)

-1

을 검색했습니다

애플은 이렇게 말한다해서 나는 암호화에 대해 걱정하지 않을 것입니다.

암호화 방식을 사용하지 않고 원하는대로 작동하게하고 승인을 위해 제출하십시오. 승인되면, 당신은 좋습니다. 그렇지 않다면 걱정하지 마십시오. 설계에 결정을 내리려면 설계에 결함이있을 수 있습니다.

+0

제안을 주셔서 감사합니다 사과와 고객이 아니라 고객이 서버와 캐시에서 가져온 것이 암호화되어 있어야합니다. 디자인은 그대로 암호화 구성 요소와 별개이지만 응용 프로그램은 스트림을 가져 와서 암호화 된 것을 반환하는이 마법 상자를 가져야합니다. 또는 그 반대의 경우도 있습니다.이 구성 요소가 어떻게 구현 될지 일반적으로 이해하고 있지만 처리해야 할 많은 사례가 너무 많습니다. 나는 단지 다른 사람들의 일이 도움이 될 수 있도록 (즉, 거친 모양이라 할지라도) 시작해야합니다. – Nick

관련 문제