2010-01-12 11 views
6

Ho un codice che scarica un plist da un server web e lo memorizza nella directory dei documenti del telefono. La mia preoccupazione è che se il file si corrompe, ciò influenzerà la stabilità e l'esperienza utente dell'applicazione.Una buona strategia per garantire l'integrità di un file

Sto codificando in modo difensivo nelle parti di lettura dei dati dell'app, ma mi chiedevo quale consiglio ci sia per verificare l'integrità del file in primo luogo prima che il vecchio sia sovrascritto. Sto pensando di implementare una sorta di valore calcolato che viene anche memorizzato come chiave nel plist, ad esempio.

Qualsiasi idea su come rendere questo più robusto possibile sarebbe molto apprezzato.

migliori saluti

Dave

+1

questo è ciò che MD5 è per –

risposta

5

Date un'occhiata al CommonCrypto/CommonDigest.h.

La funzione CC_MD5(const void *data, CC_LONG len, unsigned char *md); calcola un hash 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 

Nell'ambito della distribuzione dei file sul server, è possibile utilizzare OpenSSL per calcolare i hashs. Il comando openssl md5 filename calcola un hash MD5 per un file. Questo può essere integrato in uno script.

Quindi dopo che l'applicazione ha scaricato un file, calcola l'hash di ciò che è stato scaricato e lo confronta con l'hash memorizzato sul server.

Ovviamente, se si desidera garantire l'integrità di un file plist, questo plist non può contenere il proprio hash.

+0

Grazie Gregory, questo è veramente utile. Non supponete di sapere se facendo ciò costituisce l'uso della crittografia all'interno della vostra applicazione? Mi riferisco alla domanda che ti viene fatta quando invii un'app all'app store. Saluti Dave. –

+0

Non preoccuparti, l'applicazione non verrà rifiutata per il calcolo di un hash MD5. –

+0

+1 per suggerire questo. – Sudhanshu

Problemi correlati