usar una publica privada imagen generar con como clave cifrar archivo c encryption openssl rsa

una - ¿Por qué no puedo leer la clave de publicación RSA generada por openssl con PEM_read_RSAPublicKey?



generar.pem openssl (3)

La utilidad openssl rsa guarda la clave pública mediante la función PEM_write_bio_RSA_PUBKEY y no PEM_write_bio_RSAPubicKey. Por lo tanto, si desea que su programa sea compatible con su salida, entonces debe usar PEM_write_bio_RSA_PUBKEY y PEM_read_bio_RSA_PUBKEY para guardar / cargar archivos de clave pública.

http://openssl.6102.n7.nabble.com/RSA-public-private-keys-only-work-when-created-programatically-td12532.html

Estoy tratando de leer una clave pública RSA generada con openssl como este:

Private Key: openssl genrsa -out mykey.pem 1024 Public Key afterwards: openssl rsa -in mykey.pem -pubout > somewhere.pub

Entonces trato de leer:

FILE *keyfile = fopen("somewhere.pub", "r"); RSA *rsa_pub = PEM_read_RSAPublicKey(keyfile, NULL, NULL, NULL); //rsa_pub == NULL!

Cuando estoy leyendo la clave privada funciona

FILE *keyfile = fopen("mykey.pem", "r"); RSA *rsa_pri = PEM_read_RSAPrivateKey(keyfile, NULL, NULL, NULL); //all good

¿Algunas ideas?

He leído que openssl genera una clave X509 de la clave pública RSA. Pero no pude cargar ni siquiera una clave de pub X509.

Gracias


Parece que hay dos formatos de clave pública rsa, con codificación diferente.

A. RSA_PUBKEY

RSA* rsaPubKey = PEM_read_bio_RSA_PUBKEY( bio, NULL, 0, pass ) ;

leer PUBKEY con este formato

-----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY-----

generado por

openssl rsa -in key.pri -pubout -out key.pub1

B. RSAPublicKey

RSA* rsaPubKey = PEM_read_bio_RSAPublicKey( bio, NULL, 0, pass ) ;

lee PublicKey con este formato

-----BEGIN RSA PUBLIC KEY----- ... -----END RSA PUBLIC KEY-----

generado por

openssl rsa -in key.pri -RSAPublicKey_out -out key.pub2

convertir formato A a B

openssl rsa -in key.pub1 -pubin -pubout -out key.pub2


Puede probar PEM_read_RSA_PUBKEY() lugar de PEM_read_RSAPublicKey() .

Esto es todo acerca de los formatos.

El formato de archivo de clave pública predeterminado generado por openssl es el formato PEM.

PEM_read_RSA_PUBKEY() lee el formato PEM. PEM_read_RSAPublicKey() lee el formato PKCS # 1.

Por lo tanto, si desea mantener PEM_read_RSAPublicKey() , podría generar el archivo de clave pública utilizando el formato PKCS # 1 especificando la opción -outform DER al generar la clave pública.