来自图片的md5哈希在iOS / Android中有所不同

时间:2014-09-08 08:50:08

标签: android ios image hash md5

我对图片中的md5哈希有疑问。我已经编写了一个Android应用程序,它从每个图像生成md5哈希并将图像保存在此文件名下。当我将字符串与我的Windows PC上的程序进行比较时,它与字符串完全相同。甚至在线生成器生成相同的字符串。所以我认为一切都在Android上运行良好。 现在谈到iOS ......我不知道是什么以及如何,但iOS7会改变它所获得的每一张图像。 (我认为)。 例如: 如果我制作一张照片,从这张图片中生成哈希并将其保存在我的Android或桌面上,那么它在iPhone上有另一个哈希值。 我甚至试图通过我的iPhone上的safari保存我的一个图像,然后将其恢复到我的桌面。田田,我之前有另一个哈希。即使图片的大小也不同(约300b)。

有人可以告诉我Apple在这里做了什么,以及如何避免这种情况?如果哈希值永远不相同,我如何比较从Android和iOS设备上的服务器下载的图像?

我使用哈希来比较图片是否从我的服务器上正确下载,但在这种情况下它不能在iOS下运行。

我在这里读过类似的文章:IOS UIImage data differ with android image (for image downloaded from google) 但对此没有直接的答案。我相信来自iOS的md5方法是正确的,但我认为iOS确实是"事情"使用图像使md5始终不同。

谢谢。

编辑: 这是我生成哈希的代码:

+(NSString*)getHash:(UIImage *)bild{
    NSData *imageData = UIImagePNGRepresentation(bild);
    unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];

    CC_MD5(imageData.bytes, imageData.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]];

    NSLog(@"Result: %@",output);
    return output;
}

2 个答案:

答案 0 :(得分:0)

我相信你直接在UIImage对象上进行哈希处理,而不是先将它转换为NSData。您需要将其转换为NSData,然后执行散列。

NSData *dataFromImage = UIImagePNGRepresentation(theImage, compressionQuality);

//perform hash on dataFromImage

答案 1 :(得分:0)

+(NSString *)md5HashOfImage:(NSData *)imageData {
    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    CC_MD5(imageData.bytes, (CC_LONG)imageData.length, digest);

    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];

    for( int i = 0; i < CC_MD5_DIGEST_LENGTH; i++ )
    {
        [output appendFormat:@"%02x", digest[i]];
    }

    NSLog(@"%@", output);
    return output;
}