2012-02-18 6 views
0

Я ищу образец HMAC-SHA1 кода в Objective-C я увидел this образец, и это выглядит ясным и читаемым, проблема заключается в том, что там есть одна неясная линия:HMAC-SHA1 образец кода

NSString *hash = [HMAC base64Encoding]; 

и парень сказал, что base64Encoding обычай код его ...

Можете ли вы помочь мне заполнить пустой и совет, что мне нужно, чтобы поставить там вместо этого?

Спасибо.

+0

ли вы получить эту работу, как я ищу, чтобы создать подпись для AWS SES. – MMKD

+0

Это работает, но я не мог убедиться, правильно ли он работает. – Nir

+0

Большое спасибо. Я смог получить эту сортировку, спасибо, используя другой метод, поэтому я не могу подтвердить или опровергнуть этот подход. – MMKD

ответ

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

Очень красивая категория, безусловно, пригодится для некоторых! –

+0

Я пытаюсь вызвать эту функцию следующим образом: NSString * hash = [self base64Encoding: HMAC]; но это исключает исключение: «NSInvalidArgumentException», причина: «- [ViewController base64Encoding:]: нераспознанный селектор, отправленный в экземпляр – Nir

+0

Если объявить его в вашем ViewController (что плохо), используйте' - (NSString *) 'вместо' + (NSString *) ' – Artem

Смежные вопросы