tags:

views:

2004

answers:

2

So as many of you may already know, CommonCrypto isn't included in the iPhone SDK anymore (as on 3.0).

Where else can I easily get hold of an MD5 function? Am I going to have to compile OpenSSL into my project just to get MD5??

A few clarifications:

  • This isn't for security
  • This is going to be used with an API that requires an MD5 digest of a string. I have no control over this API.

If I could use SHA256, I would. I'm all for moving forward, but I can't change the API.


Edit

It seems I was mistaken. CommonCrypto is still in the iPhone SDK, just not explicity as it used to be. I was looking for the libCrypto library to include in my project. I was unaware that you could include the CommonCrypto headers without linking against the library...

+5  A: 

Are you sure its not included? I have apps compiled on the device for 3.0 using the following code that works:

#import <CommonCrypto/CommonDigest.h>

#define CC_MD5_DIGEST_LENGTH 16   /* digest length in bytes */

- (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]]; 
}
coneybeare
+1  A: 

Try a standalone md5 implementation - C code and headers you can just embed.

You can find a number of implementations at the unofficial MD5 Homepage

Or, I suppose this is the canonical implementation (I fished around for the header, but came up empty...) http://people.csail.mit.edu/rivest/Md5.c

jmanning2k