Heim >Backend-Entwicklung >C++ >Wie konvertiert man RSA-Schlüssel vom PKCS#1- in das X.509-Format in OpenSSL?

Wie konvertiert man RSA-Schlüssel vom PKCS#1- in das X.509-Format in OpenSSL?

DDD
DDDOriginal
2024-11-07 20:14:03402Durchsuche

How to Convert RSA Keys from PKCS#1 to X.509 Format in OpenSSL?

Konvertieren von RSA-Schlüsseln vom PKCS#1- in das X.509-Format

In OpenSSL können RSA-Schlüssel in zwei Formaten gespeichert werden:

  • PKCS#1: Enthält nur den öffentlichen Schlüssel.
  • X.509: Enthält die SubjectPublicKeyInfo-Struktur, die die Algorithmus-OID und enthält der öffentliche Schlüssel.

.NET kann sowohl ASN.1/DER-codierte Schlüssel (PKCS#1) als auch PEM-codierte Schlüssel (X.509) verarbeiten. So konvertieren Sie einen PKCS#1-Schlüssel in einen X.509-Schlüssel:

1. Verwenden Sie PEM_write_bio_PUBKEY anstelle von PEM_write_bio_RSAPublicKey:

  • PEM_write_bio_RSAPublicKey schreibt nur den öffentlichen Schlüssel (PKCS#1).
  • PEM_write_bio_PUBKEY schreibt die SubjectPublicKeyInfo (X.509).

2. Konvertieren Sie den RSA-Schlüssel in EVP_PKEY mit EVP_PKEY_set1_RSA:

  • Diese Funktion wandelt den RSA-Schlüssel in einen EVP_PKEY um, der die Algorithmus-OID enthält.

Beispielcode :

<code class="c++">#include <openssl/pem.h>
#include <openssl/rsa.h>
#include <openssl/evp.h>

int main() {
    RSA *rsa = RSA_new();
    BN_set_word(BN_new(), RSA_F4);
    RSA_generate_key_ex(rsa, 2048, NULL, NULL);

    EVP_PKEY *pkey = EVP_PKEY_new();
    EVP_PKEY_set1_RSA(pkey, rsa);

    BIO *pem = BIO_new_file("rsa-public.pem", "w");
    PEM_write_bio_PUBKEY(pem, pkey);

    RSA_free(rsa);
    EVP_PKEY_free(pkey);
    return 0;
}</code>

Dieses Programm generiert ein RSA-Schlüsselpaar, konvertiert den öffentlichen Schlüssel in ein X.509-Format und speichert ihn in der Datei „rsa-public.pem“.

Das obige ist der detaillierte Inhalt vonWie konvertiert man RSA-Schlüssel vom PKCS#1- in das X.509-Format in OpenSSL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn