2014-01-22 55 views
0

我創建了一個與我的包一起部署的文件的MD5,以決定是否需要導入它。 我的問題是,當我創建MD5總是不同的。即使我用相同的數據在循環中調用MD5方法10次,我也得到了不同的結果。NSData的MD5總是不一樣

這裏是我的MD%方法:

- (NSString*)hashForData:(NSData*)data 
{ 
    unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH]; 
    CC_MD5((__bridge const void*)(data), (CC_LONG)data.length, md5Buffer); 
    NSMutableString* output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; 
    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) 
     [output appendFormat:@"%02x", md5Buffer[i]]; 

    return output; 
} 

- (NSData*)data 
{ 
    if (!_data) { 
     _data = [NSData dataWithContentsOfFile:_path]; 
    } 
    return _data; 
} 

任何想法可能是錯誤的?

回答

2

不應該認爲是:

CC_MD5((__bridge const void*)([data bytes]), (CC_LONG)[data length], md5Buffer); 
//       ^^^^^^^^^^^^   ^^^^^^^^^^^^^ 

(即你正在計算NSData對象(和鄰近的存儲器的MD5哈希),而不是數據NSData對象)。

+0

使用選擇器vs屬性根本不重要。但是你絕對不能把對象轉換成指針。 –

+0

@ RichardJ.RossIII它對我有用。 – trojanfoe

+0

你是絕對正確的。 CC_MD5([數據字節],(CC_LONG)data.length,md5Buffer); – netshark1000

相關問題