图片中的md5哈希在iOS/Android中有所不同
我有一个关于图像中md5散列的问题。我已经编写了一个android应用程序,它从它拍摄的每个图像生成md5哈希,并将图像保存在此文件名下。当我将该字符串与Windows PC上的程序进行比较时,它是完全相同的字符串。甚至在线生成器也会生成相同的字符串。所以我认为Android上的一切都很好。 现在说到iOS。。。我不知道是什么和如何,但iOS7会改变它得到的每一张图像。我想。 例如: 如果我制作了一张照片,从这张照片生成散列,并将其保存在我的Android或桌面上,它有一个与iPhone上的散列不同的散列。 我甚至试着在iPhone上通过safari保存我的一张图片,然后将它发送回我的桌面。塔达,我之前又吃了一份。甚至图片的大小也相差约300b 有人能告诉我苹果在这里做什么以及如何避免这种情况吗?如果散列永远不会相同,我如何比较从android和iOS设备上的服务器下载的图像 我使用散列来比较图片是否正确地从我的服务器下载,但在这种情况下,它在iOS下不起作用 我在这里读过一篇类似的文章: 但对此没有直接的答案。我相信iOS中的md5方法是正确的,但我认为iOS会处理图像,所以md5总是不同的 多谢各位 编辑: 以下是生成哈希的代码:图片中的md5哈希在iOS/Android中有所不同,android,ios,image,hash,md5,Android,Ios,Image,Hash,Md5,我有一个关于图像中md5散列的问题。我已经编写了一个android应用程序,它从它拍摄的每个图像生成md5哈希,并将图像保存在此文件名下。当我将该字符串与Windows PC上的程序进行比较时,它是完全相同的字符串。甚至在线生成器也会生成相同的字符串。所以我认为Android上的一切都很好。 现在说到iOS。。。我不知道是什么和如何,但iOS7会改变它得到的每一张图像。我想。 例如: 如果我制作了一张照片,从这张照片生成散列,并将其保存在我的Android或桌面上,它有一个与iPhone上的散列
+(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;
}
我相信您是直接对UIImage对象进行哈希运算,而不是首先将其转换为NSData。您需要将其转换为NSData,然后执行哈希 NSData*dataFromImage=UIImagePNGRempresentationTheImage,压缩质量
//对dataFromImage执行哈希您能告诉我们如何从映像创建哈希吗?Answare的thx:。已在使用NSData,请参阅操作中的编辑。请尝试使用:NSData*哈希=[NSData DATAWITHYBETS:const void*图像数据长度:CC_MD5_DIGEST_length];NSString*decodedString=[[NSString alloc]initWithBytes:hash.bytes长度:hash.length编码:NSUTF8StringEncoding];NSLog@%@,解码字符串;
+(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;
}