#import +(NSString*) md5:(NSString*) str { const char *cStr = [str UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5( cStr, strlen(cStr), 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] ]; } #define CHUNK_SIZE 1024 +(NSString *)file_md5:(NSString*) path { NSFileHandle* handle = [NSFileHandle fileHandleForReadingAtPath:path]; if(handle == nil) return nil; CC_MD5_CTX md5_ctx; CC_MD5_Init(&md5_ctx); NSData* filedata; do { filedata = [handle readDataOfLength:CHUNK_SIZE]; CC_MD5_Update(&md5_ctx, [filedata bytes], [filedata length]); } while([filedata length]); unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5_Final(result, &md5_ctx); [handle closeFile]; 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] ]; }