iOS SecKeyRef de NSString

Necesito cifrar una contraseña de usuario para la cadena base64 usando una key pública.

La key pública es un NSString.

Algo como esto:

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

¿Cómo hago un SecKeyRef?

Encontré un tutorial aquí

Pero no pude hacerlo funcionar porque SecCertificateCreateWithData siempre devuelve cero.

Este es mi codigo

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"); } 

El SecKeyRef es siempre nulo porque el certificate también es nulo. Por favor, ayúdame.

No puedes simplemente pasar datos key. Debe pasar un certificate firmado por su key para poder extraer la key del certificate. Mira esta respuesta a una pregunta similar .