0

我创建了一个与我的包一起部署的文件的 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;
}

知道有什么问题吗?

4

1 回答 1

2

那不应该是:

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

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

于 2014-01-22T15:45:37.667 回答