2010-07-16 3 views
1

Mon application "flux" de contenu (fichiers de taille fixe, guillemets) à partir d'un serveur HTTP dans un fichier local. Ensuite, il y a un autre composant de l'application qui ouvre ce même fichier et l'affiche (le joue). Ceci est fait à des fins de mise en cache, de sorte que lorsque le même fichier est demandé la prochaine fois, il n'aura plus besoin d'être téléchargé depuis le serveur.Cryptage du contenu en continu sur un stockage persistant et décryptage du flux sur l'iPhone

spécifications de App exige que tout le contenu local est crypté (même avec un cryptage de poids la plus légère)

Question: at-il été fait des travaux, permettant de simplement rediriger le flux vers une bibliothèque qui sera ensuite enregistrer le flux crypté dans un fichier? Et puis, lorsque je demande le flux à partir du fichier local, la bibliothèque retourne un flux déchiffré à la volée?

J'ai cherché une solution sans résultats jusqu'à présent

Merci

+0

Cela ressemble à une raison plutôt idiote de crypter quelque chose (comme il semble que les données téléchargées n'ont pas besoin de soyez en sécurité). Où, dans les spécifications Apple, est-il dit que toutes les données locales doivent être cryptées? – shookster

+0

pas les spécifications de la pomme, mais les exigences du client :( – Nick

+0

Est-ce que cela aide? Https://nickharris.wordpress.com/2010/07/14/core-data-and-enterprise-iphone-applications-protecting-your-data/ – shookster

Répondre

2

J'ai fini par écrire une solution personnalisée qui utilise le cryptage RC4 à partir de la bibliothèque Crypt intégrée. C'était étonnamment simple. Fondamentalement, il impliquait la création d'une fonction qui encrypte/déchiffre morceaux de NSData puis lire/écrire les morceaux de fichiers ... Voici la fonction qui fait le cryptage au cas où quelqu'un d'autre est intéressé:

- (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]; 
} 

Il est évident que l'on pourrait créer Quelque chose de plus sûr (par exemple AES) ou autre (en fait j'ai utilisé des exemples d'autres wrappers de cryptage pour écrire celui-ci)

-1

Je ne vous inquiétez pas sur le cryptage simplement parce que Apple dit.

Faites ce travail comme vous le voulez (sans cryptage, cela sonne comme) et soumettez-le pour approbation. Si approuvé, vous êtes bon. Si non, inquiétez-vous alors. Si votre conception vous oblige à prendre une décision maintenant, votre conception pourrait être défectueuse.

+0

Le design est distinct du composant de cryptage tel qu'il est, mais l'application devra avoir cette boîte magique qui prend un flux et retourne un chiffré, ou vice versa.J'ai une compréhension générale de la façon dont ce composant sera mis en œuvre, mais il y a tellement de petits cas qui doivent être pris en charge J'ai juste besoin de commencer avec smth, donc le travail de quelqu'un d'autre aiderait (même si c'est dans une forme approximative) – Nick

Questions connexes