计算在iPhone上从NSData的校验(Compute a checksum on the iPh

2019-06-23 21:00发布

使用iPhone SDK,我在从图像拾取用户选择图像。 如果用户选择他们之前已经选择了一个形象,我想使用户意识到这一点。

我最初的计划(只是为了确保其他事情现在的工作)是将图像保存到一个文件(需要其他原因反正做到这一点),使用NSData的的校验和文件名。 然后,当他们选择稍后相同的图像,校验将是相同的,所以我可以看到,该名称的文件已经存在 - 万岁!

不过,我已经冲刷互联网和苹果文档如何计算从NSData的校验和。 我知道我可以实现我自己的实现,但我宁愿避免这种情况,如果可能的话。 我也高兴的如何检查两个UIImages是相同的其他想法。

编辑

两年前,我答应了代码示例,并在这里。 真抱歉耽搁! :)

+(NSString*)imageIdForData:(NSData*)data
{
        char* result = (char*) [[data MD5Sum] bytes];

        NSString* hash =  [NSString stringWithFormat: @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
                                           result[0], result[1],
                                           result[2], result[3],
                                           result[4], result[5],
                                           result[6], result[7],
                                           result[8], result[9],
                                           result[10], result[11],
                                           result[12], result[13],
                                           result[14], result[15]];

        return hash;
}

Answer 1:

<CommonCrypto/CommonDigest.h>头文件应该有一个CC_MD5函数,将计算任意数据的MD5哈希值。 这是一个C函数,所以它不会在一个NSData直接工作,但它应该做你所需要的。

一些更多的信息在这里 (包括使用的NSString的包装-应该很容易转换为使用的NSData)



Answer 2:

因为一切都与类别更好...

标题:

@interface NSData (MD5)
- (NSString *)md5String;
@end

执行:

#import <CommonCrypto/CommonDigest.h>


- (NSString *)md5String
{
    void *cData = malloc([self length]);
    unsigned char resultCString[16];
    [self getBytes:cData length:[self length]];

    CC_MD5(cData, (unsigned int)[self length], resultCString);
    free(cData);

    NSString *result = [NSString stringWithFormat:
                        @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
                        resultCString[0], resultCString[1], resultCString[2], resultCString[3],
                        resultCString[4], resultCString[5], resultCString[6], resultCString[7],
                        resultCString[8], resultCString[9], resultCString[10], resultCString[11],
                        resultCString[12], resultCString[13], resultCString[14], resultCString[15]
                        ];
    return result;
}


文章来源: Compute a checksum on the iPhone from NSData
标签: iphone nsdata