首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >HMAC-SHA1的Objective-C示例代码

HMAC-SHA1的Objective-C示例代码
EN

Stack Overflow用户
提问于 2009-04-16 14:50:48
回答 7查看 58.1K关注 0票数 63

我需要在Objective C中生成HMAC-SHA1,但是我没有找到任何可以工作的东西。我尝试使用CommonCrypto,使用CCHMAC,但不起作用。我需要生成一个hmac,然后生成HOTP编号。

有人在Objective C或C中有示例代码吗?

EN

回答 7

Stack Overflow用户

发布于 2009-04-16 14:59:47

下面是如何使用SHA-256生成HMAC:

代码语言:javascript
复制
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库,但如果我没记错的话,算法非常简单。

票数 74
EN

Stack Overflow用户

发布于 2013-05-09 17:41:56

这是一个完整的解决方案,它不需要任何额外的库或hack:

代码语言:javascript
复制
+(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库,因为它已经编码好了。

票数 21
EN

Stack Overflow用户

发布于 2011-11-28 03:12:52

这在不使用自定义协议的情况下工作,使用http://cocoawithlove.com/2009/07/hashvalue-object-for-holding-md5-and.html中的一些代码

HashSHA256.h

代码语言:javascript
复制
#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonDigest.h>

@interface HashSHA256 : NSObject {


}

 - (NSString *) hashedValue :(NSString *) key andData: (NSString *) data ; 

@end

HashSHA256.m

代码语言:javascript
复制
#import "HashSHA256.h"

#import <CommonCrypto/CommonHMAC.h>


@implementation HashSHA256


- (NSString *) hashedValue :(NSString *) key andData: (NSString *) data {


    const char *cKey  = [key 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;

}

@end

用法:

代码语言:javascript
复制
- (NSString *) encodePassword: (NSString *) myPassword {
    HashSHA256 * hashSHA256 = [[HashSHA256 alloc] init];   
    NSString * result = [hashSHA256 hashedValue:mySecretSalt andData:myPassword];       
    return result;       
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/756492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档