确保文件完整性的好策略

时间:2010-01-12 07:35:40

标签: iphone md5

我有一些代码从Web服务器下载plist并将其存储在手机的文档目录中。我担心的是,如果文件损坏,那么它将影响应用程序的稳定性和用户体验。

我正在应用程序的数据读取部分进行防御性编码,但是想知道在旧文件被覆盖之前首先检查文件的完整性有什么建议。我正在考虑实现某种计算值,例如,它也作为plist中的键存储。

任何关于使其尽可能健壮的想法都将不胜感激。

祝你好运

戴夫

1 个答案:

答案 0 :(得分:5)

查看CommonCrypto/CommonDigest.h

CC_MD5(const void *data, CC_LONG len, unsigned char *md);函数计算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

作为服务器上文件部署的一部分,您可以使用OpenSSL来计算哈希值。 openssl md5 filename命令计算文件的MD5哈希值。这可以集成在脚本中。

然后,在您的应用程序下载了一个文件后,它会计算已下载内容的哈希值,并将其与存储在服务器上的哈希值进行比较。

显然,如果要确保plist文件的完整性,此plist不能包含自己的哈希值。