NSData的MD5总是不同的

时间:2014-01-22 15:43:09

标签: ios md5 nsdata md5-file

我创建了一个与我的bundle一起部署的文件的MD5,以决定是否需要导入它。 我的问题是,当我创建MD5时总是与众不同。即使我在具有相同数据的循环中调用MD5方法10次,我也得到了不同的结果。

这是我的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;
}

知道可能出现什么问题吗?

1 个答案:

答案 0 :(得分:2)

不应该是:

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

(即,您正在计算NSData对象(和相邻内存)的MD5哈希值,而不是 NSData对象中的数据