我对图片中的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;
}
答案 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;
}