HMAC-SHA1代码示例

问题描述:

我在寻找在Objective-C 一个HMAC-SHA1代码示例我看到this样品,它看起来清晰可读,问题是,有没有一个不清楚线:HMAC-SHA1代码示例

NSString *hash = [HMAC base64Encoding]; 

接电话的人说,base64Encoding是他的自定义代码...

你能不能帮我填补空白,并建议我需要什么,而不是放在那里?

谢谢。

+0

你得到这个工作,因为我希望创建一个签名AWS SES。 – MMKD 2012-03-22 11:00:58

+0

它的工作原理,但我不能确定它是否正确地工作.. – Nir 2012-04-25 11:51:04

+0

非常感谢。我能够得到这个排序感谢你,使用另一种方法,所以我不能确认也不否认这种方法。 – MMKD 2012-04-27 12:06:09

我通常使它在这样的分类:

[NSString base64forData:HMAC]; 

这里是方法,你可以使用:

+ (NSString*)base64forData:(NSData*)theData { 
    const uint8_t* input = (const uint8_t*)[theData bytes]; 
    NSInteger length = [theData length]; 

    static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/="; 

    NSMutableData* data = [NSMutableData dataWithLength:((length + 2)/3) * 4]; 
    uint8_t* output = (uint8_t*)data.mutableBytes; 

    NSInteger i; 
    for (i=0; i < length; i += 3) { 
     NSInteger value = 0; 
     NSInteger j; 
     for (j = i; j < (i + 3); j++) { 
      value <<= 8; 

      if (j < length) { 
       value |= (0xFF & input[j]); 
      } 
     } 

     NSInteger theIndex = (i/3) * 4; 
     output[theIndex + 0] =     table[(value >> 18) & 0x3F]; 
     output[theIndex + 1] =     table[(value >> 12) & 0x3F]; 
     output[theIndex + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '='; 
     output[theIndex + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '='; 
    } 

    return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 
} 
+0

确实非常好的类别,一定会有用的! – 2012-02-23 10:33:52

+0

我试图调用这样的函数:NSString * hash = [self base64Encoding:HMAC];但它会抛出异常:'NSInvalidArgumentException',原因:' - [ViewController base64Encoding:]:无法识别的选择器发送到实例 – Nir 2012-02-25 14:48:23

+0

如果在您的ViewController中声明它(这不好),使用' - (NSString *)' (NSString *)' – Artem 2012-02-27 11:10:10