2009-11-18 13 views
5

Utilicé el comando openSSL para crear 2 archivos: 1 para clave pública RSA & 1 para clave privada RSA. ¿Cómo recupero las claves RSA usando C?Cargar claves RSA desde los archivos

En concreto, tienen las siguientes funciones:

RSA_public_encrypt(read_num, in_buf, out_buf, public_key, RSA_PKCS1_PADDING); 
RSA_private_decrypt(read_num, in_buf, out_buf, private_key, RSA_PKCS1_PADDING); 

El cuarto argumentos, public_key y private_key, necesitan estar en el tipo RSA. Pero lo que tengo son sólo 2 archivos de texto generados por el comando OpenSSL:

File 1: 
-----BEGIN RSA PRIVATE KEY----- 
MIICXAIBAAKBgQDP78B9GZ9ZFG6OnZ1PU+9BPoyLRuYJr3rSX470XjbJhmlq9DTn 
NvG1pxWxrd5tjlmMWD4AkHqD7E87AafvQEiABdUXwf30LatT1w6tlyQWkM/HCN5k 
.... 
npF+nDtKmGteLJVp5x7HHMnZaRbvcV2oUtgdmIMbqVYgbPkwO2tUfUPA6zg1fzhy 
nNzQ35e/Hi0fgSHZib0CQEe4e4txXzkezomkWqwuGL8Qqp8iCbBn44mzxXTBvAQl 
muFu93C/ULMzRoq4cpPgl3sS0F9s7+zR18SERerFvfc= 
-----END RSA PRIVATE KEY----- 

File 2: 
-----BEGIN PUBLIC KEY----- 
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDP78B9GZ9ZFG6OnZ1PU+9BPoyL 
RuYJr3rSX470XjbJhmlq9DTnNvG1pxWxrd5tjlmMWD4AkHqD7E87AafvQEiABdUX 
wf30LatT1w6tlyQWkM/HCN5kmK5WzPUYbI1q5xGy7Eox9sJ6cNwMUOT+MSDhErgB 
gkgF6uG1yGrxuEVk/QIDAQAB 
-----END PUBLIC KEY----- 

Ahora, leo estos 2 archivos en una matriz de caracteres []. Lo que tengo que hacer a continuación es convertir estas 2 matrices en 2 claves RSA (clave pública en el cliente & private_key en el servidor) para que pueda usar las funciones RSA_public_encrypt y RSA_private_decrypt.

Gracias.

+0

¿Qué quiere decir por recuperar, recuperar = leer? – RageZ

+3

¡Cuidado, no debe exponer su clave privada, ni siquiera parcialmente! – mjv

+0

[ingrese la descripción del enlace aquí] (http://stackoverflow.com/questions/30621457/how-to-translate-pem-public-key-into-openssl-rsa-structure/39216814#39216814) Eche un vistazo a esta publicación – ANDRE

Respuesta

9

Tome un vistazo a las funciones de E/S en el OpenSSL crypto library, en concreto el PEM functions

RSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **x, 
            pem_password_cb *cb, void *u); 

RSA *PEM_read_RSAPublicKey(FILE *fp, RSA **x, 
            pem_password_cb *cb, void *u); 
+1

El lector de clave pública debe ser 'PEM_read_RSA_PUBKEY', si se trata de un formato PEM. Ver http://stackoverflow.com/questions/7818117/why-i-cant-read-openssl-generated-rsa-pub-key-with-pem-read-rsapublickey –

Cuestiones relacionadas