我有一些代碼從Web服務器下載plist並將其存儲在手機的文檔目錄中。我擔心的是,如果文件損壞,那麼它會影響應用程序的穩定性和用戶體驗。一個確保文件完整性的好策略
我在應用程序的數據讀取部分進行了防禦性編碼,但是想知道在舊文件寫完之前先檢查文件完整性的建議是什麼。例如,我正在考慮實現某種計算的值,這些值也存儲在plist中作爲鍵。
任何關於儘可能健壯的想法將不勝感激。
問候
戴夫
我有一些代碼從Web服務器下載plist並將其存儲在手機的文檔目錄中。我擔心的是,如果文件損壞,那麼它會影響應用程序的穩定性和用戶體驗。一個確保文件完整性的好策略
我在應用程序的數據讀取部分進行了防禦性編碼,但是想知道在舊文件寫完之前先檢查文件完整性的建議是什麼。例如,我正在考慮實現某種計算的值,這些值也存儲在plist中作爲鍵。
任何關於儘可能健壯的想法將不勝感激。
問候
戴夫
看一看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不能包含它自己的散列。
感謝Gregory,這真的很有幫助。不要假設你知道這是否構成在你的應用程序中使用密碼術?我指的是將應用程序提交到應用商店時被問到的問題。乾杯戴夫。 – 2010-01-12 08:04:22
別擔心,您的應用程序不會因爲計算MD5哈希而被拒絕。 – 2010-01-12 08:09:53
+1表示這一點。 – Sudhanshu 2010-01-12 08:18:11
這就是MD5的 – 2010-01-12 07:37:45