几周以来,我一直在尝试为 iOS 上的 Facebook 签名请求生成 HMAC SHA256。我迫切需要帮助。
Facebook 签名请求有两个部分,由句点分隔。第一部分是有效载荷的 HMAC256,而第二部分是有效载荷的 Base64 编码字符串。我只能重新创建第二部分。
vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso。eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsIjAiOiJwYXlsb2FkIn0
我一直在使用以下每个人都使用的代码,但它会生成不同的哈希:
#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];
}
根据 Facebook 文档: https ://developers.facebook.com/docs/authentication/signed_request/
正确的 HMAC256 输出应该是使用“ secret ”作为密钥时:
vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso
要编码的有效载荷:
{
"algorithm": "HMAC-SHA256",
"0": "payload"
}
注意:您可以对签名请求的第二部分进行 Base64 解码以获取此有效负载。