2012-02-18 63 views
0

我在尋找在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

回答

1

我通常使它在這樣的分類:

[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