Reputation: 28187
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
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