5. 作成した文字列と秘密キーで、HMAC-SHA256形式の署名を作成する。
これはどうあがいても理解できそうになかったので、CCHMACを使うことに。
Google Codeにあったこことか、stackoverflowにあったこことかすごく参考になりました。
まず最初にファイルをインポート。
#import <CommonCrypto/CommonHMAC.h>
そして署名を作成します。
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
const char *cKey = [S_ID cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [forSignString cStringUsingEncoding:NSASCIIStringEncoding];
CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
解説はできません(笑)。AppleのDocumentによると、CCHmacは
void
CCHmac(CCHmacAlgorithm algorithm, const void *key, size_t keyLength, const void *data, size_t dataLength, void *macOut);
という定義がされているようです。CCHmacAlgorithm algorithmの部分を変更すれば、SHA1やMD5の署名も作れます。
6. 署名を付けたRESTリクエストを作成
署名(cHMAC)をNDDataに変換、再度Urlencodeして、urlStringの後に&Signature=[署名]の形式でくっつけ、その頭にhttp://ecs.amazonaws.jp/onca/xml?を付けてURLの形にします。
NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC
length:sizeof(cHMAC)];
NSString *hash = [self urlencode:[HMAC stringEncodedWithBase64]];
NSString *url = [NSString stringWithFormat:@"http://ecs.amazonaws.jp/onca/xml?%@&Signature=%@", urlString, hash];
これでOK。生成されたurlにFirefoxなどでアクセスしてみると、XMLが返ってくると思います。XMLが返ってきたときはとっても嬉しかったです。
2 コメント:
参考にさせていただきました。
大変わかりやすく無事動作の確認ができました。
ありがとうございます。
#自分もXMLの応答がきたときにとってもうれしかったです!
コメントありがとうございます。自分もAmazonのシステム変更時にとても苦労したので、誰かのお役に立てて嬉しいです。
コメントを投稿