6

我试图拨打亚马逊网络服务的电话,但我一直在获取签名,看着这个,但我仍然有一个问题。

使用这个例子是什么

NSData *keyData;
NSData *clearTextData

? 我需要为这两个值传递什么?

/*
  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 个小时在谷歌上搜索并寻找方法来计算 iPhone 上的未加密 SHA1,它与 php 中的 sha1() 函数的结果相匹配。结果如下:

    #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

如果您也调用亚马逊网络服务查找价格或产品详细信息,您的亚马逊网络服务密钥将被禁用,您的应用程序将停止工作。

查看亚马逊网络服务的服务条款,严格禁止移动客户端使用:

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

看看SHA1 编码的CocoaCryptoHashing

于 2009-04-09T20:24:51.537 回答
0

我在这里发布了一个解决方案,它返回 AWS 请求的 Base64 编码数据。

于 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 回答
-1

你可以看到 也许它对你有帮助。

于 2014-03-11T07:42:32.227 回答