私は何週間も前から、iOS で Facebook 署名付きリクエストの HMAC SHA256 を生成しようとしています。私は切実に助けが必要です。
Facebook 署名付きリクエストには、ピリオドで区切られた 2 つの部分があります。最初の部分はペイロードの HMAC256 で、2 番目の部分はペイロードの Base64 でエンコードされた文字列です。再現できたのは第 2 部だけです。
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/
「 secret」をキーとして使用すると、正しい HMAC256 出力が得られるはずです。
vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso
エンコードするペイロード:
{
"algorithm": "HMAC-SHA256",
"0": "payload"
}
注: 署名付きリクエストの 2 番目の部分を Base64 デコードして、このペイロードを取得できます。