2011-08-14 2 views
0

Objective-C에서 서명 된 요청을 어떻게 디코딩합니까?Objective-C : 서명 된 요청 디코딩

기본적으로이 Ruby 코드를 Objective-C 또는 C로 어떻게 변환합니까?

# Facebook sends a signed_requests to authenticate certain requests. 
# http://developers.facebook.com/docs/authentication/signed_request/ 
def decode_signed_request(signed_request) 
    encoded_signature, encoded_data = signed_request.split('.') 
    signature = base64_url_decode(encoded_signature) 
    expected_signature = OpenSSL::HMAC.digest('sha256', @secret, encoded_data) 
    if signature == expected_signature 
    JSON.parse base64_url_decode(encoded_data) 
    end 
rescue Exception => e 
    puts $!, [email protected] 
end 

def base64_url_decode(string) 
    "#{string}==".tr("-_", "+/").unpack("m")[0] 
end 

SSToolKit Base64 decode NSString

답변

1

데이터의 서명을 확인하거나 데이터를 "해독"하시겠습니까? 나는 페이스 북 SDK를 사용하면 최대 적절한 JSON 프레임 워크를 (내가 JSONKit를 권장)를 선택 둡니다

NSString *signedData = ...; 
NSString *base64EncodedData = [[signedData componentsSeparatedByString:@"."] objectAtIndex:1]; 
NSString *jsonString = [NSString stringWithBase64String:base64EncodedData]; 
id jsonObject = ...; 

: 그것은 후자의 경우, 당신은 단지 서명을 무시할 수 있습니다.

귀하의 의견은 메시지에 포함 된 HMAC를 확인하고자 함을 나타냅니다. 이 경우 :

unsigned int length = 0; 
unsigned char *expectedHmac = HMAC(EVP_sha256(), [key bytes], [key length], [base64EncodedData UTF8String], [base64EncodedData length], NULL, &length); 
NSData *expectedHmacData = [NSData dataWithBytes:expectedHmac length:length]; 
// compare expected hmac 
+0

또한 데이터의 서명을 확인하려고합니다. 이것은 좋은 출발이다. 감사! – ma11hew28

+0

반영하기 위해 답을 업데이트했습니다. 바라건대 지금은 더 도움이됩니다 :) –