如何在iOS中使用CCHmac?

时间:2015-01-05 14:25:30

标签: ios commoncrypto

我想在iOS中使用salt生成SHA512。我找到了以下代码片段来实现这一点,但我发现CCHmac()函数适用于mac。

-(NSString *)hashString:(NSString *)data withSalt:(NSString *)salt
{
    const char *cKey  = [salt cStringUsingEncoding:NSUTF8StringEncoding];
    const char *cData = [data cStringUsingEncoding:NSUTF8StringEncoding];
    unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
    CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);

    NSString *hash;
    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", cHMAC[i]];
    hash = output;
    return hash;
}

如果我使用CC_SHA512()函数,那么我将如何使用salt字符串?

2 个答案:

答案 0 :(得分:6)

我错过了以下一行:

#import <CommonCrypto/CommonHMAC.h>

实际上,&lt;我的代码中已经添加了CommonCrypto / CommonCryptor.h&gt; 。所以,初看起来,我认为不必担心导入特定的头文件。但是,我突然意识到我将不得不导入另一个头文件。

答案 1 :(得分:3)

SHA256 HMAC示例:

+ (NSData *)doHmac:(NSData *)dataIn key:(NSData *)salt
{
    NSMutableData *macOut = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH];
    CCHmac( kCCHmacAlgSHA256,
            salt.bytes, salt.length,
            dataIn.bytes, dataIn.length,
            macOut.mutableBytes);

    return macOut;
}