CommonCrypto会在iPhone设备上的应用程序中运行吗?

时间:2011-09-13 22:26:51

标签: iphone objective-c ios4 hash

this question非常相似,我正在计算用于API的字符串的MD5哈希值。

根据this thread on Apple Discussions,这不适用于设备:

  

CommonCrypto框架不在iPhone上。不幸的是,   iPhone模拟器针对Mac OS X框架进行编译,因此它可以继续使用   模拟器......但是你不会为了设备而编译它。

这样的代码仍然会在设备上运行吗?

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

在设备上生成MD5哈希的最新和最佳方法是什么? 如何在XCode 4中添加CommonCrypto / CommonDigtest.h?

谢谢,

1 个答案:

答案 0 :(得分:5)

是的,您可以使用CommonCrypto iniOS。我在APpStore中有一个使用CommonCrypto的应用程序。

有关帖子更完整的更多信息:

只需导入标题,例如

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

和框架:Security.framework

以下是使用SHA1和NSData的示例,几乎用MD5替换它:

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

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

    return macOut;
}