2014-01-22 4 views
0

내 번들과 함께 배포되는 파일의 MD5를 만들어 가져올 필요가 있는지 결정합니다. 제 문제는 MD5를 만들 때 항상 다릅니다. 동일한 데이터를 루프에서 MD5 메서드를 10 번 호출해도 다른 결과가 나타납니다. 잘못 될 수 있는지NSData의 MD5는 항상 다릅니다.

- (NSString*)hashForData:(NSData*)data 
{ 
    unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH]; 
    CC_MD5((__bridge const void*)(data), (CC_LONG)data.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]]; 

    return output; 
} 

- (NSData*)data 
{ 
    if (!_data) { 
     _data = [NSData dataWithContentsOfFile:_path]; 
    } 
    return _data; 
} 

어떤 생각 : 여기

내 MD %의 방법인가?

답변

2

는이 아니어야 (데이터 대신NSData 객체 내의 의, 즉 사용자가 NSData 오브젝트 (인접하는 메모리의 MD5 해시가 산출된다))

CC_MD5((__bridge const void*)([data bytes]), (CC_LONG)[data length], md5Buffer); // ^^^^^^^^^^^^ ^^^^^^^^^^^^^ 

.

+0

선택기와 속성을 사용하는 것은 전혀 중요하지 않습니다. 그러나 당신은 분명히 객체를 포인터로 캐스트 할 수 없습니다. –

+0

@ RichardJ.RossIII 그것은 나에게 도움이된다. – trojanfoe

+0

당신은 절대적으로 옳습니다. CC_MD5 ([데이터 바이트], (CC_LONG) data.length, md5Buffer); – netshark1000