код php в iphone - CCHmac kCCHmacAlgSHA256 - PullRequest
0 голосов
/ 19 апреля 2011

Я пытаюсь войти на свой сервер с использованием шифрования hmac sha256, у меня есть рабочий код в php, но я не могу заставить его работать в iphone, и проследил, что hmac в iphone выдает другой вывод на код php, учитывая одни и те же входы php код

  $privatekey = '6-y6f"\%BjSM;HBo\'sPr")5#t2nb-LG*;])f^Si[';
  $identity_arrow_getSecret = $privatekey;
  $date_c = "2011-04-18T23:56:28+0800";
  $uri = '/backend/1/User/Header';

  $stringToSign =  "GET\n\n\n" . $date_c . "\n" . $uri;
  $signature = hash_hmac("sha256", utf8_encode($stringToSign), $identity_arrow_getSecret);
  echo "stringToSign is $stringToSign <HR>";
  echo "signature is $signature <HR>";

код объектива-с

NSString* uri = @"/backend/1/User/Header";
NSString* date_c = @"2011-04-18T23:56:28+0800"; //[dateFormatter stringFromDate:[NSDate date]];
NSString* stringToSign = [NSString stringWithFormat:@"GET\n\n\n%@\n%@" , date_c , uri];
NSLog(@" stringToSign : %@ <>\r\n", stringToSign);

NSString* privatekey = @"6-y6f\"\%BjSM;HBo\'sPr\")5#t2nb-LG*;])f^Si[";

const char *cKey  = [privatekey cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [stringToSign cStringUsingEncoding:NSASCIIStringEncoding];

unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];

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

NSString *hash = [HMAC base64EncodedString];
NSLog(@" hash : %@ \r\n", hash);

1 Ответ

1 голос
/ 02 мая 2011

Вы можете проверить свой класс Base64. Я использую класс Base64, написанный Kiichi Takeuchi , и он дает мне результаты, идентичные процедуре, которую я написал в C # для проверки, поэтому я предполагаю, что это правильно.

Мне пришлось внести одно небольшое изменение в ваш код, чтобы проверить, так как библиотека Base64 кодирует только структуру NSData. Вот как это выглядит:

CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
NSData *nsd = [[NSData alloc] initWithBytes: cHMAC length:CC_SHA256_DIGEST_LENGTH];

NSString *hash = [Base64 encode:nsd];
[nsd release];
NSLog(@" hash : %@ \r\n", hash);
...