Esta pregunta (y respuesta) es un subconjunto de enlace .
Para comprimir y adaptar que:
Para una clave pública RSA necesita el módulo y el exponente . Es muy común usar 3 o 65537 (también conocido como F4, el cuarto primo de Fermat) como exponente, pero no es obligatorio o universal.
OpenSSL library puede admitir el formato de clave PKCS # 1 / rfc3447 específico de RSA, o el formato "SPKI" X.509 genérico y más útil y común, con uno almacenado en DER o PEM . La utilidad de línea de comandos rsa
por defecto hace SPKI PEM, pero puede seleccionar los otros formatos con opciones, ver la página del manual (en línea en enlace ).
(Como dice @zakjan) DER es una codificación de ASN.1, y PEM es DER (más) codificada como base64 (todo esto, no campos individuales como el módulo), más las líneas BEGIN y END, que indican el Formato, en este caso RSA PUBLIC KEY
para PKCS # 1 versus solo PUBLIC KEY
para SPKI. Para codificar PKCS # 1 en DER, codifique el módulo y el exponente como INTEGER ASN.1, recuerde que los módulos RSA casi siempre tienen el tamaño de un múltiplo de 8 (por ejemplo, 1024, 2048) y, por lo tanto, requieren un octeto 00 inicial, luego se codifican en un SECUENCIA. Para SPKI, incruste más en SEQUENCE con un AlgorithmIdentifier que identifica RSA, por rfc3279 .
Alternativamente, puedes usar la biblioteca OpenSSL para codificar por ti. Coloque los dos números en los objetos "bignum" (BN), apunte a los de un objeto RSA (dejando los otros campos inicializados en vacío), y escríbalos con las rutinas RSAPublicKey (no preferidas), o colóquelas en un (vacío) ) El objeto EVP_PKEY con EVP_PKEY_set1_RSA
y escribe con d2i_PublicKey{_fp,bio}
para DER o PEM_write[_bio]_PublicKey
para PEM.