iOS SecKeyRef (key pública) enviarlo al server

Ahora tengo un problema con mi key pública, utilicé SecKeyGeneratePair para generar públicos y privados. Ahora tengo que enviar mi key pública al server. He usado el siguiente método para convertir SecKeyRef a NSData, siempre recibo la misma key pública. Sin embargo, lo convertí en formatting base64 y lo envío al server. Pero no funciona y el server (Java) comienza a lanzar errores. Aquí está mi código iOS:

- (NSData *)getPublicKeyBits { OSStatus sanityCheck = noErr; NSData * publicKeyBits = nil; NSMutableDictionary * queryPublicKey = [[NSMutableDictionary alloc] init]; // Set the public key query dictionary. [queryPublicKey setObject:(id)kSecClassKey forKey:(id)kSecClass]; [queryPublicKey setObject:publicTag forKey:(id)kSecAttrApplicationTag]; [queryPublicKey setObject:(id)kSecAttrKeyTypeRSA forKey:(id)kSecAttrKeyType]; [queryPublicKey setObject:[NSNumber numberWithBool:YES] forKey:(id)kSecReturnData]; // Get the key bits. sanityCheck = SecItemCopyMatching((CFDictionaryRef)queryPublicKey, (CFTypeRef *)&publicKeyBits); if (sanityCheck != noErr) { publicKeyBits = nil; } [queryPublicKey release]; return publicKeyBits; } 

¿Puede alguien ayudarme a convertir SecKeyRef a NSString o NSData?

¡¡¡Gracias por adelantado!!!

-Murali Krishnan

Creo que las keys generadas por iOS faltan información de encabezado que el rest del mundo (API de Java en su caso) espera ver. Por lo tanto, para que Java funcione con una key generada por las API de security de iOS, primero debe agregar esta información de encabezado a la key binaria.

Por el contrario, para que las API Sec * de iOS funcionen con una key generada por openssl o ssh-keygen (por ejemplo), primero debe eliminar esta información de encabezado de la key binaria.

Específicamente, iOS no le gusta el OID ASN.1, y el rest del mundo lo hace.

Consulte este artículo para exportar una key generada por iOS para que la use una aplicación Java: debería hacerlo funcionar:

http://blog.wingsofhermes.org/?p=42