Alf*_*feG 14 iphone signature amazon-web-services
对于亚马逊服务(S3,EC2,SimpleDB的)所有操作您需要签署与HMAC-SHA-1签名(所有resquest http://en.wikipedia.org/wiki/HMAC,http://docs.amazonwebservices.com /AWSFWS/latest/DeveloperGuide/index.html?SummaryOfAuthentication.html).
我在asp.net后端工作,没有问题.问题出在iPhone应用程序中.iPhone开发人员说,没有办法使用HMAC-SHA-1编码,他也没有办法实现自己的算法.作为程序员,我无法理解为什么会出现问题.
所以我想知道iPhone开发者是对的吗?
我从来没有为iPhone编码,所以我甚至没有在哪里搜索这样的信息.
sti*_*igi 14
CommonCrypto可以解决问题.
#import <CommonCrypto/CommonHMAC.h>
Run Code Online (Sandbox Code Playgroud)
然后
/*
inputs:
NSData *keyData;
NSData *clearTextData
*/
uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0};
CCHmacContext hmacContext;
CCHmacInit(&hmacContext, kCCHmacAlgSHA1, keyData.bytes, keyData.length);
CCHmacUpdate(&hmacContext, clearTextData.bytes, clearTextData.length);
CCHmacFinal(&hmacContext, digest);
NSData *out = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];
Run Code Online (Sandbox Code Playgroud)
CommonCrypto会做到这一点.但如果你想要代码,我在这里有一些:
http://oauth.googlecode.com/svn/code/obj-c/OAuthConsumer/Crypto/
我写的用于Cocoa OAuth实现的内容:http://code.google.com/p/oauthconsumer/wiki/UsingOAuthConsumer
该文章演示了一个小功能,将产生的SHA-1散列摘要,将匹配什么,如果你给它相同的输入PHP的SHA1()函数将生成:
#import <CommonCrypto/CommonDigest.h>
@implementation SHA1
+(NSString*) digest:(NSString*)input
{
const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:input.length];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, data.length, digest);
NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x", digest[i]];
return output;
}
@end
Run Code Online (Sandbox Code Playgroud)
我不知道现在是否仍然如此,但加密算法曾经受到限制,并且您将其分发到某些国家的权利也受到限制。
如果情况仍然如此,则可能是 Apple 不希望/无法限制某些应用程序在这些国家/地区下载。
| 归档时间: |
|
| 查看次数: |
9941 次 |
| 最近记录: |