2010-01-12 7 views
6

J'ai un code qui télécharge un plist d'un serveur web et le stocke dans le répertoire de documents du téléphone. Ma préoccupation est que si le fichier est corrompu, cela affectera la stabilité et l'expérience utilisateur de l'application. Je code de façon défensive dans les parties de données de l'application, mais je me demandais quel conseil est là pour vérifier l'intégrité du fichier en premier lieu avant que l'ancien est écrit. Je songe à implémenter une sorte de valeur calculée qui est aussi stockée comme clé dans le plist par exemple.Une bonne stratégie pour assurer l'intégrité d'un fichier

Toute idée de rendre cela aussi robuste que possible serait grandement appréciée.

Meilleures salutations

Dave

+1

c'est ce que MD5 sont pour –

Répondre

5

Jetez un oeil à CommonCrypto/CommonDigest.h. La fonction CC_MD5(const void *data, CC_LONG len, unsigned char *md); calcule un hachage MD5.

@implementation NSData (MD5) 

-(NSString*)md5 
{ 
    unsigned char digest[CC_MD5_DIGEST_LENGTH]; 
    CC_MD5([self bytes], [self length], digest); 

    NSString* s = [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", 
        digest[0], digest[1], 
        digest[2], digest[3], 
        digest[4], digest[5], 
        digest[6], digest[7], 
        digest[8], digest[9], 
        digest[10], digest[11], 
        digest[12], digest[13], 
        digest[14], digest[15]]; 
    return s; 

} 

@end 

Dans le cadre du déploiement des fichiers sur le serveur, vous pouvez utiliser OpenSSL pour calculer les hashs. La commande openssl md5 filename calcule un hachage MD5 pour un fichier. Cela peut être intégré dans un script.

Ensuite, après que votre application a téléchargé un fichier, elle calcule le hachage de ce qui a été téléchargé et le compare au hachage stocké sur le serveur.

De toute évidence, si vous souhaitez garantir l'intégrité d'un fichier plist, ce plist ne peut pas contenir son propre hachage.

+0

Merci Gregory, c'est vraiment utile. Ne supposez-vous pas que si vous faites cela, cela constitue l'utilisation de la cryptographie dans votre application? Je fais référence à la question qui vous est posée lors de la soumission d'une application sur l'App Store. À bientôt Dave. –

+0

Ne vous inquiétez pas, votre application ne sera pas rejetée pour le calcul d'un hachage MD5. –

+0

+1 pour suggérer cela. – Sudhanshu