2010-07-16 24 views
1

我的應用程序將來自HTTP服務器的內容(固定大小的文件,因此是引號)「流式傳輸」到本地文件中。然後還有另一個應用程序組件打開相同的文件並顯示它(播放它)。將流媒體內容加密到持久性存儲上並將其解密爲iPhone上的流

這是爲了緩存目的而完成的,以便下次請求相同的文件時,不再需要從服務器下載。

應用程序的規範要求,所有本地內容進行加密(即使是最重量輕加密)

問題:以前有做過任何工作,讓一個簡單的流重定向到一個庫,它會再將加密的流保存到文件中?然後,當我從本地文件請求流時,庫會返回一個即時解密的流?

我一直在尋找迄今沒有結果的解決方案

感謝

+0

似乎是一個非常愚蠢的理由加密的東西(因爲它聽起來像被下載的數據並不需要安全)。在蘋果規範中,它說所有本地數據都必須加密嗎? – shookster 2010-07-16 02:44:49

+0

不是蘋果規格,但客戶端的要求:( – Nick 2010-07-17 01:10:47

+0

這是否有幫助?https://nickharris.wordpress.com/2010/07/14/core-data-and-enterprise-iphone-applications-protecting-your-data/ – shookster 2010-07-17 05:18:52

回答

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 2010-07-16 19:53:10