为了账号安全,请及时绑定邮箱和手机立即绑定

HMAC-SHA1的Objective-C示例代码

HMAC-SHA1的Objective-C示例代码

C C#
至尊宝的传说 2019-11-23 11:03:59
我需要在目标C中生成HMAC-SHA1。但是我没有找到任何有效的方法。我尝试使用CCHMAC与CommonCrypto,但没有用。我需要生成一个hmac,然后生成HOTP编号。有人在Objective C或C中有任何示例代码吗?
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

使用SHA-256生成HMAC的方法如下:


NSString *key;

NSString *data;


const char *cKey  = [key cStringUsingEncoding:NSASCIIStringEncoding];

const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding];


unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];


CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);


NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC

                                      length:sizeof(cHMAC)];


NSString *hash = [HMAC base64Encoding];

我不知道HOTP库,但是如果我没记错的话,该算法非常简单。


查看完整回答
反对 回复 2019-11-23
?
慕标5832272

TA贡献1966条经验 获得超4个赞

这是一个完整的解决方案,无需任何额外的库或技巧即可工作:


+(NSString *)hmac:(NSString *)plainText withKey:(NSString *)key

{

    const char *cKey  = [key cStringUsingEncoding:NSASCIIStringEncoding];

    const char *cData = [plainText cStringUsingEncoding:NSASCIIStringEncoding];


    unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];


    CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);


    NSData *HMACData = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];


    const unsigned char *buffer = (const unsigned char *)[HMACData bytes];

    NSString *HMAC = [NSMutableString stringWithCapacity:HMACData.length * 2];


    for (int i = 0; i < HMACData.length; ++i)

        HMAC = [HMAC stringByAppendingFormat:@"%02lx", (unsigned long)buffer[i]];


    return HMAC;

}

您不必包含任何第三方base64库,因为它已经被编码。


查看完整回答
反对 回复 2019-11-23
  • 3 回答
  • 0 关注
  • 790 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信