Solicitud firmada de Facebook para iOS (HMAC SHA256)

He estado tratando de generar HMAC SHA256 para la solicitud firmada de Facebook en iOS desde hace semanas. Estoy desesperado por la necesidad de ayuda.

Las solicitudes firmadas de Facebook tienen dos partes que están separadas por un período. La primera parte es un HMAC256 de la carga útil, mientras que la segunda parte es la cadena codificada Base64 de la carga útil. Solo he podido recrear la segunda parte.

vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsIjAiOiJwYXlsb2FkIn0

He estado usando el siguiente código que todos usan, pero está generando un hash diferente:

#import <CommonCrypto/CommonHMAC.h>
#import "NSData+Base64.h"

+(NSString*) hmacForSecret:(NSString*)secret data:(NSString*)data {

     const char *cKey  = [secret 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)];

     return [HMAC base64EncodedString];
}

Según los documentos de Facebook:https://developers.facebook.com/docs/authentication/signed_request/

La salida HMAC256 correcta debe ser cuando se usa "secreto"como la clave:

 vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso

La carga útil a codificar:

 {
     "algorithm": "HMAC-SHA256",
     "0": "payload"
 }

NOTA: Puede Base64 decodificar la segunda parte de la solicitud firmada para obtener esta carga útil.

Respuestas a la pregunta(1)

Su respuesta a la pregunta