ios – 在iphone上用NSData字节初始化BIO变量

ios – 在iphone上用NSData字节初始化BIO变量,第1张

概述我必须在iPhone应用程序内验证应用程序内购买的收据(仅限iOS 7). 不幸的是,加密,openssl和In-App购买对我来说是全新的,所以我有一些问题让他们工作. 我正在按照Apple提供的指南在本地验证收据,我将openssl作为静态库包含在我的项目中.这是Apple提供的用于使用OpenSSL验证收据签名的代码: BIO *b_receipt;BIO *b_x509;PKCS7 我必须在iPhone应用程序内验证应用程序内购买的收据(仅限iOS 7).
不幸的是,加密,openssl和in-app购买对我来说是全新的,所以我有一些问题让他们工作.
我正在按照Apple提供的指南在本地验证收据,我将openssl作为静态库包含在我的项目中.这是Apple提供的用于使用OpenSSL验证收据签名的代码:

BIO *b_receipt;BIO *b_x509;PKCS7 *p7 = d2i_PKCS7_bio(b_receipt,NulL);X509_STORE *store = X509_STORE_new();X509 *appleRootCA = d2i_X509_bio(b_x509,NulL);X509_STORE_add_cert(store,appleRootCA);BIO *b_receiptPayload;int result = PKCS7_verify(p7,NulL,store,b_receiptPayload,0);if (result == 1){    // Receipt signature is ValID    // b_receiptPayload contains the payload}

我使用此代码获取收据和证书:

NSData *receiptData = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];NSData *certificateData = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"AppleIncRootCertificate" withExtension:@"cer"]];

如何使用这两个NSData初始化BIO变量b_receipt和b_x509?

解决方法 从 http://www.openssl.org/docs/crypto/BIO_s_mem.html开始:

BIO *BIO_new_mem_buf(voID *buf,int len);

从给定缓冲区创建只读内存BIO对象.在你的情况下

BIO *b_receipt = BIO_new_mem_buf((voID *)[receiptData bytes],(int)[receiptData length]);

直接从提供的缓冲区读取数据.如果receiptData有效则为有效
如果使用b_receipt,则无需复制数据.

BIO_new_mem_buf()不会修改缓冲区,因此您可以安全地添加voID *强制转换以避免将“传递’const voID *’传递给’voID *’类型的参数,并丢弃限定符”警告.

总结

以上是内存溢出为你收集整理的ios – 在iphone上用NSData字节初始化BIO变量全部内容,希望文章能够帮你解决ios – 在iphone上用NSData字节初始化BIO变量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1057253.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存