首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >苹果收货设备哈希验证

苹果收货设备哈希验证
EN

Stack Overflow用户
提问于 2014-03-15 00:15:12
回答 2查看 886关注 0票数 1

我正在尝试验证收据是否针对这个特定的设备,它使用了一个流行的接收库的代码来进行收据验证,名为RMStore:

代码语言:javascript
复制
NSUUID * uuid = [[UIDevice currentDevice] identifierForVendor];
uuid_t uuidBytes;
[uuid getUUIDBytes:uuidBytes];

NSMutableData * data = [[NSMutableData alloc] init];
[data appendBytes:uuidBytes length:sizeof(uuidBytes)];
[data appendData:_parsedReceipt.opaqueValue];
[data appendData:_parsedReceipt.bundleIdentifierData];

NSMutableData * computedHash = [NSMutableData dataWithLength:SHA_DIGEST_LENGTH];
SHA1(data.bytes, data.length, computedHash.mutableBytes);

return [computedHash isEqualToData:_parsedReceipt.hash];

但这两个哈希并不相等。密码有问题吗?

编辑

代码语言:javascript
复制
    SKReceiptRefreshRequest * request = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:@{SKReceiptPropertyIsRevoked: @YES}];
    [request setDelegate:self];
    [request start];

当我重取收据一次后,散列开始匹配。这是我见过的最奇怪的行为。有人知道为什么会发生这种事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-26 09:10:52

正如您所使用代码的答案所示,如果验证失败,Apple建议刷新收据。这是RMStore为验证收据/事务所做的工作:

代码语言:javascript
复制
RMAppReceipt *receipt = [RMAppReceipt bundleReceipt];
const BOOL verified = [self verifyTransaction:transaction inReceipt:receipt success:successBlock failure:nil]; // failureBlock is nil intentionally. See below.
if (verified) return;

// Apple recommends to refresh the receipt if validation fails on iOS
[[RMStore defaultStore] refreshReceiptOnSuccess:^{
    RMAppReceipt *receipt = [RMAppReceipt bundleReceipt];
    [self verifyTransaction:transaction inReceipt:receipt success:successBlock failure:failureBlock];
} failure:^(NSError *error) {
    [self failWithBlock:failureBlock error:error];
}];
票数 1
EN

Stack Overflow用户

发布于 2020-11-25 19:23:22

我只想补充一件事--我花了一段时间才弄明白为什么我的散列不匹配.

接收bundleId示例: ASN1八进制字符串(27字节)ASN1

它实际上由标识符(0C)、长度(19)和值(63.6D)组成。

用于比较app.bundleId == receipt.bundleId ->只使用

生成散列->的使用整个ASN1缓冲区

(否则SHA1将导致不同的值)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22417956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档