4

私は何週間も前から、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 デコードして、このペイロードを取得できます。

4

1 に答える 1