2010-01-12 15 views
6

Tengo un código que descarga un plist de un servidor web y lo almacena en el directorio de documentos del teléfono. Mi preocupación es que si el archivo se daña, afectará la estabilidad y la experiencia del usuario de la aplicación.Una buena estrategia para garantizar la integridad de un archivo

Estoy codificando a la defensiva en las partes de lectura de datos de la aplicación, pero me pregunto qué consejos hay para verificar la integridad del archivo en primer lugar antes de que se escriba el anterior. Estoy pensando en implementar algún tipo de valor calculado que también se almacena como una clave en el plist, por ejemplo.

Cualquier idea sobre hacer esto tan robusto como sea posible sería muy apreciada.

Saludos

de Dave

+1

eso es lo que MD5 es para –

Respuesta

5

Eche un vistazo a CommonCrypto/CommonDigest.h.

La función CC_MD5(const void *data, CC_LONG len, unsigned char *md); calcula 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 

Como parte de la implementación de los archivos en el servidor, puede usar OpenSSL para calcular los hashs. El comando openssl md5 filename calcula un hash MD5 para un archivo. Esto se puede integrar en un script.

Luego, después de que su aplicación haya descargado un archivo, calcula el hash de lo que se ha descargado y lo compara con el hash almacenado en el servidor.

Obviamente, si desea garantizar la integridad de un archivo plist, este plist no puede contener su propio hash.

+0

Gracias Gregory, esto es realmente útil. ¿No supone que sabe si al hacerlo constituye el uso de la criptografía dentro de su aplicación? Me refiero a la pregunta que se te hace cuando envías una aplicación a la tienda de aplicaciones. Saludos, Dave. –

+0

No se preocupe, su aplicación no será rechazada para calcular un hash MD5. –

+0

+1 por sugerir esto. – Sudhanshu

Cuestiones relacionadas