2011-10-07 2 views
4

에서 파일의 MD_5 해시를 얻을 난 아이폰에있는 파일의 MD_5 해시 코드를 얻을 필요가있다. uptill 이제 모든 이미지/모든 파일 md_5 얻을 다음 코드를 발견했습니다. 웹 측면 난에 때 이미지의 ByteContent을 얻고 그 이미지 바이트 배열 문자열 지금내 프로젝트에서 아이폰

UIImage *image = [UIImage imageNamed:@"sf_small.png"]; 
NSData *data = UIImagePNGRepresentation(image); 
NSString *str = [NSString stringWithFormat:@"%@",data]; 
NSString *temp = [self getMD5FromString:str]; 

내가 성공적으로의 해시 코드를 얻고의 md_5을 얻을 그러나이 코드를 사용하여

-(NSString *)getMD5FromString:(NSString *)source{ 
    const char *src = [source UTF8String]; 
    unsigned char result[CC_MD5_DIGEST_LENGTH]; 
    CC_MD5(src, strlen(src), result); 
    return [[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] 
     ]lowercaseString]; 
    } 

동일한 파일의 md_5 해시 코드를 얻으면 다른 해시 코드를 얻을 수 있습니다. 웹 측면에서 나는 PHP 코드

md5_file(string $filename); 

이 PHP 코드는 나에게 전혀 다른 해시 코드를 제공하고 아이폰 코드가 나에게 같은 이미지에 대해 서로 다른 해시 코드를 제공을 사용하고 있습니다.

감사 alot을 .. 문제가 될 수 있는지 알려주세요!

tic.png

답변

7

두 가지 원인이 있습니다. 첫 번째 이유는 원시 바이트 → 문자열 → UTF-8 프로세스가 일부 비 ASCII 문자를 손상시키기 때문입니다. 당신이 직접 NSData에서 바이트에 대한 포인터를 얻을 수 있습니다 :

UIImage* image = [UIImage imageNamed:@"sf_small.png"]; 
NSData* data = UIImagePNGRepresentation(image); 

const void* src = [data bytes]; 
NSUInteger len = [data length]; 
CC_MD5(src, len, result); 
... 

두 번째 원인으로 인해 PNG 처리하기 → PNG → 원시 이미지입니다. 동일한 이미지가 다른 라이브러리의 동일한 PNG 표현으로 압축 될 보증 대상이 없으며 물론 MD5도 달라집니다.

대신 나들이 UTF8String 사용 NSMacOSRomanStringEncoding
NSData* data = [NSData dataWithContentsOfFile:@"sf_small.png"]; 

const void* src = [data bytes]; 
NSUInteger len = [data length]; 
CC_MD5(src, len, result); 
... 
+0

형제는 여전히 나에게 다른 ID를 제공합니다 .. :(내 qyestion 나는 거기에 하나 개의 이미지를 첨부했습니다. 당신은 당신이 아이폰과 PHP에서 md_5 해시를 받고 거기에 나를 권고 방법을 사용하시기 바랍니다 수 있습니다. 업데이트를 검색 할 수 있습니다.? 난 당신에게 매우 감사 할 것입니다하시기 바랍니다 귀하의 방법에서 내가 ** 55af3b3b9368db38f6cdc0321719a7b1 ** <무엇입니까 -.이 해시 코드를 아이폰과 ** a6ff392a1c5798c705430f942bfd95a6이 ** <에 -. PHP ..Please 통해이 hasCode이 유 – Shah

+0

을 도울 수 @ sHaH .. : 업데이트보기 – kennytm

+0

thnx .. m 완료 :) – Shah

1

, 그것은 8 개 비트 문자를 허용 :이 데이터로 파일을 직접 읽을 가능성으로 당신은, 모두 이미지로 파일을 읽는 피할 수 있습니다.

더 나은는 참조 변환하지 않고있는 NSData 포인터를 사용 @KennyTM합니다.

관련 문제