目标C:使用SHA512发出POST请求

时间:2013-04-04 00:02:17

标签: objective-c post sha512

我需要在https://btc-e.com/api/documentation上访问API。我现在一直在谷歌搜索并尝试了很多东西3天,我完全没有希望能够访问该API。

需要使用SHA512加密POST请求并使用密钥签名。

所以,我尝试在Objective C中实现它。

我遇到问题的功能

NSString *hmacForKeyAndData(NSString *key, NSString *data)
{
const char *cKey  = [key cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding];
unsigned char cHMAC[CC_SHA512_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA512, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
NSData *enryptedData= [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
// encryptedData seems to be in right form
// <ef56b041 12345678 12345678 12345678 a6128b61 12345678 f409507e 12345678 54a91f40 52f491e0 12345678 18942391 12345678 b2749b14 12345678 12345678>
NSString *result;

// HERE: I need to somehow convert NSData to NSString

return result;
}

我只是无法获得如何正确加密此消息以及如何将其转换为我可以作为POST参数发送的字符串:(

您能否帮我解决如何使用密钥签名处理SHA512?

1 个答案:

答案 0 :(得分:0)

API没有提到他们希望签名是base64编码的。这个网站提供了一个很好的例子,说明了如何http://agerson.net/base64-encode-and-decode-nsstring-cocoa

我认为您还将加密与签名混淆。 API似乎不会要求您加密数据。它会要求您签署您的数据。您拥有的enryptedData变量是签名,无需加密。只需对其执行base64编码并将其分配给Sign标题。