来自NSString的iOS SecKeyRef

我需要使用公钥将用户密码encryption到base64string。

公钥是一个NSString。

像这样的东西:

“MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgWO7p1AvCaHUeaM6rSczBBAqt mKObHxGW3VgTom2zGwswGj9t / Hr7NdJQCGAiq0ijcW9 / oYnM / JobbsyEijHKqIQm OVMsV4JRoG68PEDszH / ebkqWhzu7vG9IQ6VYIkaKHqk7cg + mQ1qFDoigOooFJ2Pf Uzbmg + Z / DuYDuwg + bwIDAQBC”

我如何从它做一个SecKeyRef?

我在这里find了一个教程

但是我不能让它工作,因为SecCertificateCreateWithData总是返回nil。

这是我的代码

NSData* data = [NSString base64DataFromString:PUBLIC_KEY]; SecCertificateRef cert = NULL; SecPolicyRef policy = NULL; cert = SecCertificateCreateWithData(kCFAllocatorDefault, (__bridge CFDataRef)(data)); policy = SecPolicyCreateBasicX509(); OSStatus status = noErr; SecKeyRef *publicKey = NULL; SecTrustRef trust = NULL; SecTrustResultType trustType = kSecTrustResultInvalid; if (cert != NULL){ SecCertificateRef certArray[1] = {cert}; CFArrayRef 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; } } } else { NSLog(@"CERT == NULL"); } if (publicKey == NULL) { NSLog(@"PUBLIC KEY == NULL"); } 

SecKeyRef总是零,因为证书也是零。 请帮帮我。

你不能只传递关键数据。 您必须通过由您的密钥签名的证书才能将密钥从证书中取出。 看到这个答案 类似的问题 。