是否有适用于iPhone的库可以使用HMAC-SHA-1编码

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)


sch*_*hwa 6

CommonCrypto会做到这一点.但如果你想要代码,我在这里有一些:

http://oauth.googlecode.com/svn/code/obj-c/OAuthConsumer/Crypto/

我写的用于Cocoa OAuth实现的内容:http://code.google.com/p/oauthconsumer/wiki/UsingOAuthConsumer


raa*_*aaz 5

文章演示了一个小功能,将产生的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)


Fre*_*son 0

我不知道现在是否仍然如此,但加密算法曾经受到限制,并且您将其分发到某些国家的权利也受到限制。

如果情况仍然如此,则可能是 Apple 不希望/无法限制某些应用程序在这些国家/地区下载。