Questa domanda (e risposta) è un sottoinsieme di link .
Per comprimere e adattare quello:
Per una chiave pubblica RSA è necessario il modulo e l'esponente . È molto comune usare 3 o 65537 (ovvero F4, il quarto primo Fermat) come esponente, ma non obbligatorio o universale.
La libreria OpenSSL può supportare sia il formato chiave PKCS # 1 / rfc3447 specifico per RSA, sia il formato generico e più utile e comune X.509 "SPKI", con uno memorizzato in DER o PEM . L'utilità della riga di comando rsa
di default fa SPKI PEM, ma puoi selezionare gli altri formati con le opzioni, vedi la manpage (online su link ).
(come dice @zakjan) DER è una codifica di ASN.1, e PEM è DER (ulteriormente) codificato come base64 (il tutto, non i singoli campi come il modulo), più le linee BEGIN e END, che indicano il formato, in questo caso RSA PUBLIC KEY
per PKCS # 1 rispetto a PUBLIC KEY
per SPKI. Per codificare PKCS # 1 in DER, codificare il modulo e l'esponente come INTEGER ASN.1, ricordando che i moduli RSA sono quasi sempre dimensionati come multipli di 8 (es. 1024, 2048) e quindi richiedono un ottetto iniziale, quindi codificano in un SEQUENZA. Per SPKI, incorporare ulteriormente in SEQUENCE con un AlgorithmIdentifier che identifica RSA, per rfc3279 .
In alternativa, puoi usare la libreria OpenSSL per codificarti. Metti i due numeri in oggetti "bignum" (BN), punta a quelli da un oggetto RSA (lasciando gli altri campi inizializzati a vuoto), e scrivilo con le routine RSAPublicKey (non), o meglio impostalo in un (vuoto ) Oggetto EVP_PKEY con EVP_PKEY_set1_RSA
e scrivi con d2i_PublicKey{_fp,bio}
per DER o PEM_write[_bio]_PublicKey
per PEM.