gpt4 book ai didi

ios - 从 base64 编码的字符串中获取 SecKeyRef

转载 作者:技术小花猫 更新时间:2023-10-29 10:25:56 29 4
gpt4 key购买 nike

我正在开发一个 iOS 应用程序,我得到一个 base64 编码的公钥,例如:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3gn+tJ1+PbP0GHa6hmM35WsVyibpypWAwRuBYY4MGfh3VWoXgiyiLo5HJTW1eR9BUFq3z+yOG1rwzSabZ8I4zneWm0kH7xErSjNrMbmjirbL7e6TQNa1ujP/x4x9XVbqf3vIsNVs19kn/qSX/HGzd5Ct3TGAo0AT0T4JwkCfciwIDAQAB

我想用这个公钥对一些文本进行编码,但是我找不到将这个字符串转换为有用的公钥的方法。

我需要做什么?

最佳答案

首先,您必须将 NSString 进行 base64 解码为 NSData:参见 this answer解决方案。如果你正在为 iOS 7 开发,你可以使用 initWithBase64EncodedString::options .

一旦将字符串解码为 NSData,就可以尝试从中创建证书。您收到的证书格式很重要——您可以使用 DER(很常见)或 PKCS12。您可能会以 DER 的形式获得它,因此我假设您需要这方面的指导。

创建证书和策略:

SecCertificateRef   cert    = NULL;
SecPolicyRef policy = NULL;

cert = SecCertificateCreateWithData(kCFAllocatorDefault, data);
policy = SecPolicyCreateBasicX509();

如果传递给 SecCertificateCreateWithData 的证书数据格式不正确,您将得到 NULL 结果。

此时您有证书,但没有公钥。要获得公钥,您必须 create a trust reference and evaluate the trust证书。

OSStatus        status      = noErr;
SecKeyRef *publicKey = NULL;
SecTrustRef trust = NULL;
SecTrustResultType trustType = kSecTrustResultInvalid;

if (cert != NULL){
SecCertificateRef certArray[1] = {cert};
certs = CFArrayCreate(kCFAllocatorDefault, (void *)certArray, 1, NULL);
status = SecTrustCreateWithCertificates(certs, policy, &trust);

if (status == errSecSuccess){
status = SecTrustEvaluate(trust, &trustType);

// Evaulate the trust.
switch (trustType) {
case kSecTrustResultInvalid:
case kSecTrustResultConfirm:
case kSecTrustResultDeny:
case kSecTrustResultUnspecified:
case kSecTrustResultFatalTrustFailure:
case kSecTrustResultOtherError:
break;
case kSecTrustResultRecoverableTrustFailure:
*publicKey = SecTrustCopyPublicKey(trust);
break;
case kSecTrustResultProceed:
*publicKey = SecTrustCopyPublicKey(trust);
break;
}

}
}

如果一切顺利,您现在应该有一个带有公钥的填充 SecKeyRef。如果它不顺利,您将有一个 NULL SecKeyRef 和一个 OSStatus 指示出了什么问题。安全框架中的 SecBase.h 提供了有关这些错误代码的更多详细信息。

现在您有了带有公钥的 SecKeyRef,programming guide 很好地介绍了如何使用它通过相应的私钥加密数据。 .

请注意,您必须使用 ARC 或 CFRelease 释放上面分配的内容(策略、证书)。

关于ios - 从 base64 编码的字符串中获取 SecKeyRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12319849/

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