2012-05-28 10 views
5

el que estoy alrededor en cosas que requiere cifrado RSA y tengo algo de código que se parece a esto:cifrado RSA en Objective-C (Mac)

- (NSData *)RSAEncryptData:(NSData *)data { 

    NSMutableData * encrypted = [NSMutableData dataWithLength:256]; 

    RSA * rsa = RSA_new(); 
    rsa->n = BN_bin2bn(modulus.bytes, modulus.length, NULL); 
    rsa->e = BN_bin2bn(exponent.bytes, exponent.length, NULL); 

    RSA_public_encrypt(data.length, data.bytes, encrypted.mutableBytes, rsa, RSA_PKCS1_OAEP_PADDING); 
    RSA_free(rsa); 
    return encrypted; 

} 

Dónde módulo y exponente son NSData objetos.

Esto funciona bien, aparte de todos los métodos de RSA hacen que el compilador gime sobre cómo están obsoletos en Mac OS 10.7.

¿Hay una manera más moderna en que debería estar haciendo esto? He estado buscando en Google por unas horas y solo pude encontrar cosas de iOS que no están disponibles en Mac (SecKeyEncrypt, etc.).

Para ser absolutamente claro, no estoy buscando una solución de iOS, estoy buscando una de Mac OS.

Respuesta

6

Por the Next-Generation Cryptographic Services presentation at WWDC 2011, OpenSSL está en desuso en Mac OS X 10.7 y versiones posteriores, ya que el control de versiones para las bibliotecas de OpenSSL es horrible.

Dicho esto, actualmente no existe un reemplazo directo para las funciones RSA en OpenSSL. Todavía. Probablemente puedas continuar usándolos por ahora; Tendrás que vivir con las advertencias. Alternativamente, puede seguir el consejo de Jon Callas en esa presentación y agrupar su propia copia de libcrypto para RSA.

+0

Bueno, mis métodos base64 se han reducido desde la lectura de ese artículo, así que eso es positivo :) Sin embargo, es una pena que no haya una alternativa de Marco de seguridad para RSA. –

1

¿Usted ya ha revisado this? Parece que el problema exacto es tu pregunta; sin embargo, esta pregunta parece estar resuelta.

+1

En cualquier caso, mi visión sobre los compiladores es: No te quejes si bien no presenta una solución alternativa;) – Digitalis

+1

De hecho, no es exactamente lo que yo' Estoy buscando (una solución no-openssl sería bueno), pero refuerza que está bien usar libs más viejas para cerrar el compilador. –