gpt4 book ai didi

iphone - iOS 中 X.509 ASN.1 RSA 公钥的 SecKeyRef

转载 作者:太空狗 更新时间:2023-10-30 03:45:53 24 4
gpt4 key购买 nike

我意识到在 Stack Overflow 上有很多与我将要问的问题相似的问题,但没有一个能真正满足我的需求,所以我们开始吧:

我的程序通过网络接收一个 ASN.1 编码的 RSA 公钥。我将数据存储在一个简单的 NSData 实例中。我希望使用该公钥对 16 字节的数据进行编码并通过网络返回这些数据。根据我的研究,执行此操作的最佳方法似乎是使用 SecKeyRef。根据 Apple 提供的可笑的模糊文档,这可以使用一些代码来完成。但是,他们的代码存在问题。每次我想使用公钥时,我都需要将它添加到钥匙串(keychain)中并为其提供唯一标识符。问题在于此 key 只能使用一次。我正在寻找一种方法来获取不在钥匙串(keychain)中且根据 ASN.1 编码 key 创建的 key 的 SecKeyRef。

我还考虑了通过 base64 编码将其转换为普通 PEM 并将其包装在 '-----BEGIN PUBLIC KEY-----' 和 '-----END PUBLIC KEY-- 中的可能性---' 然后将其加载到 SecKeyRef 中,但我也没有找到执行此操作的方法。

此外,我在 key 类型、 key 格式等方面没有太多选择。它来自第 3 方 java 服务器。是的。

我目前有这种加载 key 的替代方法(可能)不会将它们添加到 key 链中,但 key 显然(通过反复试验 :D)不是 DER 格式,因此我无法加载它像这样。

SecCertificateRef certificateRef = SecCertificateCreateWithData(kCFAllocatorDefault, (__bridge CFDataRef)data); //data contains the public key - received over the network
SecPolicyRef policyRef = SecPolicyCreateBasicX509();
SecTrustRef trustRef;

OSStatus status = SecTrustCreateWithCertificates(certificateRef, policyRef, &trustRef);
NSAssert(status == errSecSuccess, @"SecTrustCreateWithCertificates failed.");

SecTrustResultType trustResult;
status = SecTrustEvaluate(trustRef, &trustResult);
NSAssert(status == errSecSuccess, @"SecTrustEvaluate failed.");

SecKeyRef publicKey = SecTrustCopyPublicKey(trustRef); //The Result :)
NSAssert(publicKey != NULL, @"SecTrustCopyPublicKey failed.");

if (certificateRef) CFRelease(certificateRef);
if (policyRef) CFRelease(policyRef);
if (trustRef) CFRelease(trustRef);

PS:苹果为什么这么难?静态链接 OpenSSL 很容易,但随后会出现各种导出法规和其他问题。

最佳答案

问题显然出在“证书”的来源上,实际上不超过the key wrapped in some DER tags。 .

从好的方面来说,这要归功于这个 http://blog.wingsofhermes.org/?p=75 中的黑魔法博客文章,我已经成功地实现了我的大部分目标。

成功:

  • 从数据而不是文件加载 key
  • Java 服务器成功读取了 secret (AES) key 的加密。

不太成功:

  • 必须使用唯一标识符,但我会重复使用它,因此不需要疯狂的命名方案。
  • key 暂时添加到钥匙串(keychain)中,但我在使用一次后将其删除,这样也能解决问题。

我仍然不太清楚混合了循环和大量魔数(Magic Number)的 if 语句数组究竟做了什么,但至少它有效,而且由于 key 总是来自同一来源,它应该不会中断,除非他们更改了 Java 安全提供程序......哦等等,这实际上有点可能......哦好吧......至少它在 Java 7 标准中有点特定。

*交叉手指* *希望没有任何问题*

关于iphone - iOS 中 X.509 ASN.1 RSA 公钥的 SecKeyRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17770873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com