1

我需要访问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吗?

4

1 回答 1

0

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

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

于 2013-04-04T00:19:10.987 回答