2010-01-12 52 views
6

我有一些代碼從Web服務器下載plist並將其存儲在手機的文檔目錄中。我擔心的是,如果文件損壞,那麼它會影響應用程序的穩定性和用戶體驗。一個確保文件完整性的好策略

我在應用程序的數據讀取部分進行了防禦性編碼,但是想知道在舊文件寫完之前先檢查文件完整性的建議是什麼。例如,我正在考慮實現某種計算的值,這些值也存儲在plist中作爲鍵。

任何關於儘可能健壯的想法將不勝感激。

問候

戴夫

+1

這就是MD5的 – 2010-01-12 07:37:45

回答

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不能包含它自己的散列。

+0

感謝Gregory,這真的很有幫助。不要假設你知道這是否構成在你的應用程序中使用密碼術?我指的是將應用程序提交到應用商店時被問到的問題。乾杯戴夫。 – 2010-01-12 08:04:22

+0

別擔心,您的應用程序不會因爲計算MD5哈希而被拒絕。 – 2010-01-12 08:09:53

+0

+1表示這一點。 – Sudhanshu 2010-01-12 08:18:11