6

Amazon Web サービスへの呼び出しを取得しようとしていて、署名の取得に行き詰まっています。これを見ましたが、まだ質問があります。

この例を使用すると、

NSData *keyData;
NSData *clearTextData

? これらの 2 つの値に何を渡す必要がありますか?

/*
  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]
4

7 に答える 7

33

グーグルで 4 時間ほどかけて、PHP の sha1() 関数の結果と一致するキーなしの SHA1 を iPhone で計算する方法を探しました。結果は次のとおりです。

    #import <CommonCrypto/CommonDigest.h>

    NSString *hashkey = <your data here>;
// PHP uses ASCII encoding, not UTF
const char *s = [hashkey cStringUsingEncoding:NSASCIIStringEncoding];
NSData *keyData = [NSData dataWithBytes:s length:strlen(s)];

// This is the destination
uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0};
// This one function does an unkeyed SHA1 hash of your hash data
CC_SHA1(keyData.bytes, keyData.length, digest);

// Now convert to NSData structure to make it usable again
NSData *out = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];
// description converts to hex but puts <> around it and spaces every 4 bytes
NSString *hash = [out description];
hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];
// hash is now a string with just the 40char hash value in it

うまくいけば、これは iPhone で SHA1 に苦労している他の人の助けになるでしょう。

于 2009-07-05T17:41:34.760 に答える
5

Amazon Web サービスを呼び出して価格や製品の詳細を調べようとすると、Amazon Web サービス キーが無効になり、アプリが動作しなくなります。

アマゾン ウェブ サービスの利用規約を確認してください。モバイル クライアントによる使用は固く禁じられています。

https://affiliate-program.amazon.com/gp/advertising/api/detail/agreement.html

私自身のアプリケーションが本番アプリで AWS キーを無効にしていたときに、これを困難な方法で見つけました。私はTOSを読みましたが、上のリンクからわかるように、他のあいまいな使用の詳細へのリンクからわかるように、実際にはそこにはありませんでした. アフィリエイト プログラムが API と関係があるとは思わないかもしれませんが、関係はあります。

ブロックされた他のアプリの詳細については、次の TechCrunch 記事を参照してください。

http://www.techcrunch.com/2009/07/07/amazon-killing-mobile-apps-that-use-its-data/

頭を上げて、うまくいけば、多くの作業を節約できます。

于 2009-04-10T04:51:28.467 に答える
2
// This is my code used in my Twitter connection, and working well for me.
// KeithF's code was a big help!
//
// This is a category added to NSData.

@implementation NSData (EOUtil)
- (NSData*)dataByHmacSHA1EncryptingWithKey:(NSData*)key
{   
    void* buffer = malloc(CC_SHA1_DIGEST_LENGTH);
    CCHmac(kCCHmacAlgSHA1, [key bytes], [key length], [self bytes], [self length], buffer);
    return [NSData dataWithBytesNoCopy:buffer length:CC_SHA1_DIGEST_LENGTH freeWhenDone:YES];
}
@end
于 2010-05-06T05:17:43.737 に答える
0

AWS が要求する Base64 でエンコードされたデータを返す、これに対する 1 つのソリューションをここに投稿しました。

于 2009-06-04T18:04:01.800 に答える
0

Apple の iOS 開発者ライブラリは、CryptoExerciseというタイトルの優れたサンプルを提供しており、これには単純な関数が含まれています。

- (NSData *)getHashBytes:(NSData *)plainText" to get a SHA-1 hash.
于 2012-05-02T14:05:33.790 に答える
0

SHA1 エンコーディングについてはCocoaCryptoHashingをご覧ください。

于 2009-04-09T20:24:51.537 に答える
-1

これを見る と、役立つかもしれません。

于 2014-03-11T07:42:32.227 に答える