Czy istnieje biblioteka dla iPhone ' a do pracy z kodowaniem HMAC-SHA-1

Dla wszystkich operacji z usługami Amazon(S3, EC2, SimpleDB) musisz podpisać wszystkie resquest podpisem HMAC-SHA-1 ( http://en.wikipedia.org/wiki/HMAC , http://docs.amazonwebservices.com/AWSFWS/latest/DeveloperGuide/index.html?SummaryOfAuthentication.html).

Pracuję pod asp.net backend i nie ma problemów. Problem jest w aplikacji iPhone. twórca iPhone ' a mówi, że nie ma sposobu na użycie kodowania HMAC-SHA-1 i nie ma żadnych rigthów do wdrożenia jego własny algorytm. Jako programista nie mogę zrozumieć, dlaczego może być problem.

Więc ja też chcę wiedzieć czy iPhone developer ma rację?

nigdy nie kodowałem dla iPhone ' a, więc nawet nie wiem gdzie szukać takiej informacji.

Author: Spencer Ruport, 2009-01-24

7 answers

CommonCrypto to zrobi. Ale jak chcesz kod to mam tutaj:

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

Które napisałem do użycia w implementacji Cocoa OAuth: http://code.google.com/p/oauthconsumer/wiki/UsingOAuthConsumer

 6
Author: schwa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-24 23:08:56

CommonCrypto działa.

#import <CommonCrypto/CommonHMAC.h>

Potem

/*
  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];
 14
Author: stigi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-11 15:17:59

Ten artykuł demonstruje małą funkcję, która wygeneruje Skrót skrótu SHA-1, który będzie pasował do tego, co funkcja PHP sha1() wygeneruje, jeśli podasz jej to samo wejście:

#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
 5
Author: raaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-23 04:05:15

Trochę wygooglowałem i znalazłem ten dokument .

Eksport SHA1 podlega (Stany Zjednoczone)Rząd Federalny kontrole eksportu i eksporterzy są zaleca się kontakt z Działem Handel, biuro eksportu Administracja Więcej informacji.

Znalazłem również to :

Chińska Republika Ludowa i były radziecki blok może importować SHA jako o ile jest przeznaczony dla cywilnych użytkownik końcowy aplikacje, a nie dla cel wojskowy. Następujące państwa są zabronione z import SHA: Kuba, Iran, Irak, Libia, Korea Północna, Serbia, Syria oraz Sudan. Należy pamiętać, że ta lista kraje objęte embargiem zmieniają się z czasem.

(nie jest to bezpośrednia odpowiedź na twoje pytanie, ale na pewno trafna.)

 4
Author: bentford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-06 16:20:38

Nie w szczególności dla iPhone ' a, ale biblioteka libs3 zapewnia C API dostępu do usług Amazon S3. To, lub komponent FUSE s3fs, może być dobrym źródłem do wyodrębniania procedur potrzebnych do komunikacji z usługami sieciowymi Amazon. Ponieważ Objective-C jest nadal C w jego rdzeniu, te procedury powinny działać dobrze na iPhone.

Znam przynajmniej jednego programistę, który używa czegoś podobnego w swojej aplikacji iPhone do komunikacji z wiadrami S3.

 2
Author: Brad Larson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-24 19:10:36

Myślę, że Biblioteka CommonCrypto zrobi to, co chcesz. Spójrz na ten plik:

/Developer / Platforms / iPhoneOS.Platforma / programista / SDKs/iPhoneOS2. 2.sdk / usr / include/CommonCrypto / CommonHMAC.h

 2
Author: Chris Lundie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-24 21:14:03

Nie wiem, czy tak już jest, ale kiedyś istniały ograniczenia dotyczące algorytmów szyfrowania, a twoje prawo do rozpowszechniania ich w niektórych krajach było ograniczone.

Jeśli nadal tak jest, może być tak, że Apple nie chce/nie może ograniczyć pobierania niektórych aplikacji w tych krajach.

 0
Author: Fredrik Jansson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-24 18:51:18