barfoon
barfoon

Reputation: 28187

Will CommonCrypto work in my app on an iPhone device?

Very similar to this question, I'm looking to calculate the MD5 hash of a string for use in an API.

According to this thread on Apple Discussions, this won't work on a device:

The CommonCrypto framework is not on the iPhone. Unfortunately, the iPhone Simulator compiles against Mac OS X frameworks so it'll work on the Simulator...but you won't get it to compile for the device.

Will code like this still run on the device ok?

#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]];        
}

What is the latest and best way to generate an MD5 hash on the device? How do you add CommonCrypto/CommonDigtest.h in XCode 4?

Thanks,

Upvotes: 1

Views: 7597

Answers (1)

zaph
zaph

Reputation: 112865

Yes you can use CommonCrypto iniOS. I have an app in the APpStore that uses CommonCrypto.

More info to make the post more complete:

Just import headers such as

#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonHMAC.h>
#import <CommonCrypto/CommonCryptor.h>

and the framework: Security.framework

Here is an example using SHA1 with NSData, just pretty much replace it with MD5:

+ (NSData *)doSha1:(NSData *)dataIn
{
    NSMutableData *macOut = [NSMutableData dataWithLength:CC_SHA1_DIGEST_LENGTH];

    CC_SHA1( dataIn.bytes,
             dataIn.length,
             macOut.mutableBytes);

    return macOut;
}

Upvotes: 5

Related Questions