14

Amazon サービス (S3、EC2、SimpleDB) でのすべての操作について、すべてのリクエストに HMAC-SHA-1 署名 ( http://en.wikipedia.org/wiki/HMAChttp://docs.amazonwebservices.com ) で署名する必要があります。 /AWSFWS/latest/DeveloperGuide/index.html?SummaryOfAuthentication.html )。

asp.net バックエンドで作業していますが、問題はありません。問題は iPhone アプリケーションにあります。iPhone 開発者は、HMAC-SHA-1 エンコーディングを使用する方法はなく、独自のアルゴリズムを実装する権利もないと述べています。プログラマーとして、なぜ問題が発生するのか理解できません。

だから私も知りたいですiPhone開発者は正しいですか?

私は iPhone 用にコーディングしたことがないので、そのような情報を検索する場所さえありません。

4

7 に答える 7

14

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];
于 2009-03-11T15:17:59.253 に答える
6

CommonCrypto がそれを行います。しかし、コードが必要な場合は、ここにいくつかあります。

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

Cocoa OAuth 実装で使用するために書いたもの: http://code.google.com/p/oauthconsumer/wiki/UsingOAuthConsumer

于 2009-01-24T23:08:56.163 に答える
5

この記事では、同じ入力を与えた場合に php sha1() 関数が生成するものと一致する SHA-1 ハッシュ ダイジェストを生成する小さな関数を示します。

#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
于 2010-12-23T04:05:15.160 に答える
4

少しグーグルして、このドキュメントを見つけました。

SHA1 の輸出は (米国) 連邦政府の輸出管理の対象であり、輸出者は詳細について商務省輸出管理局に問い合わせることをお勧めします。

私もこれを見つけまし

中華人民共和国と旧ソ連ブロックは、軍事目的ではなく民間のエンドユーザー アプリケーションを対象としている限り、SHA をインポートできます。次の国は SHA の輸入を禁止されています: キューバ、イラン、イラク、リビア、北朝鮮、セルビア、シリア、スーダン。この禁輸国のリストは時間の経過とともに変化することに注意してください。

(あなたの質問に対する直接的な回答ではありませんが、確かに適切です。)

于 2010-01-06T16:20:38.363 に答える
2

CommonCrypto ライブラリは、あなたが望むことを行うと思います。このファイルを見てください:

/開発者/プラットフォーム/iPhoneOS.platform/開発者/SDKs/iPhoneOS2.2.sdk/usr/include/CommonCrypto/CommonHMAC.h

于 2009-01-24T21:14:03.257 に答える
2

特に iPhone 向けではありませんが、ライブラリlibs3は、Amazon の S3 サービスにアクセスするための C API を提供します。それ、または FUSE s3fsコンポーネントは、Amazon の Web サービスとの通信に必要なルーチンを抽出するための優れたソースになる可能性があります。Objective-C のコアは依然として C であるため、これらのルーチンは iPhone でも問題なく動作するはずです。

S3 バケットと通信するために iPhone アプリケーション内で同様のものを使用している開発者を少なくとも 1 人知っています。

于 2009-01-24T19:10:36.830 に答える
0

これが当てはまるかどうかはわかりませんが、以前は暗号化アルゴリズムに制限があり、特定の国にそれらを配布する権利が制限されていました。

それでもそうであれば、Appleがこれらの国で特定のアプリケーションのダウンロードを制限したくない/制限できない可能性があります。

于 2009-01-24T18:51:18.257 に答える