Есть ли библиотека для iPhone для работы с кодировкой HMAC-SHA-1 - PullRequest
14 голосов
/ 24 января 2009

Для всех операций со службами Amazon (S3, EC2, SimpleDB) Вам необходимо подписать все запросы с помощью подписи HMAC-SHA-1 (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, поэтому даже не знаю, где искать такую ​​информацию.

Ответы [ 7 ]

14 голосов
/ 11 марта 2009

CommonCrypto добивается цели.

#import <CommonCrypto/CommonHMAC.h>

потом позже

/*
  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];
6 голосов
/ 25 января 2009

CommonCrypto сделает это. Но если вы хотите код, у меня есть некоторые здесь:

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

который я написал для использования в реализации OAuth Какао: http://code.google.com/p/oauthconsumer/wiki/UsingOAuthConsumer

5 голосов
/ 23 декабря 2010

Эта статья демонстрирует небольшую функцию, которая сгенерирует дайджест хеша 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
4 голосов
/ 06 января 2010

Немного гуглил и я нашел этот документ .

Экспорт SHA1 подлежит (United Statese) Федеральное правительство экспортный контроль и экспортеры Рекомендуется обратиться в отдел Торговля, Бюро экспорта Администрация для получения дополнительной информации.

Я также нашел это :

Китайская Народная Республика и бывший советский блок может импортировать SHA как Пока это предназначено для гражданского приложения для конечных пользователей, а не для военного назначения. Следующие странам запрещено импорт SHA: Куба, Иран, Ирак, Ливия, Северная Корея, Сербия, Сирия и Судан. Обратите внимание, что этот список Страны эмбарго меняются со временем.

(Не прямой ответ на ваш вопрос, но, безусловно, уместен.)

2 голосов
/ 25 января 2009

Я думаю, что библиотека CommonCrypto будет делать то, что вы хотите. Посмотрите на этот файл:

/ Разработчик / Платформы / iPhoneOS.platform / Разработчик / SDKs / iPhoneOS2.2.sdk / USR / включать / CommonCrypto / CommonHMAC.h

2 голосов
/ 24 января 2009

Не для iPhone, в частности, но библиотека libs3 предоставляет C API для доступа к сервисам Amazon S3. Он или компонент FUSE s3fs могут быть хорошими источниками для извлечения процедур, необходимых для взаимодействия с веб-сервисами Amazon. Поскольку Objective-C по-прежнему является ядром C, эти функции должны отлично работать на iPhone.

Я знаю, по крайней мере, одного разработчика, который использует нечто подобное в своем приложении для iPhone для связи с корзинами S3.

0 голосов
/ 24 января 2009

Я не знаю, так ли это больше, но раньше были ограничения на алгоритмы шифрования, и ваше право распространять их в определенных странах было ограничено.

Если это все еще так, возможно, Apple не хочет / не может ограничить загрузку определенных приложений в этих странах.

...