Verwendung des OpenSSL-RSA-Schlüssels mit .Net
OpenSSL bietet unterschiedliche Schlüsselformate, was zu Kompatibilitätsproblemen mit verschiedenen Modulen führt.
Problem: .Net erfordert einen Schlüssel im Format „-----BEGIN PUBLIC KEY-----“ und nicht im Format „-----BEGIN RSA PUBLIC KEY-----“. von OpenSSL generiertes Format.
Lösung:
Verwenden Sie PEM_write_bio_PUBKEY anstelle von PEM_write_bio_RSAPublicKey, um den öffentlichen Schlüssel zu schreiben. PEM_write_bio_PUBKEY enthält die erforderliche Struktur „SubjectPublicKeyInfo“, während PEM_write_bio_RSAPublicKey nur den öffentlichen Schlüssel ausgibt.
Konvertieren von Schlüsseln in das erforderliche Format:
So konvertieren Sie einen OpenSSL-RSA-Schlüssel in das Um das für .Net erforderliche Format zu erhalten, können Sie den folgenden Code verwenden:
<code class="cpp">BIO_FILE_ptr pem1(BIO_new_file("rsa-public-1.pem", "w"), ::BIO_free); EVP_KEY_ptr pkey(EVP_PKEY_new(), ::EVP_PKEY_free); rc = RSA_generate_key_ex(rsa.get(), 2048, bn.get(), NULL); ASSERT(rc == 1); rc = EVP_PKEY_set1_RSA(pkey.get(), rsa.get()); ASSERT(rc == 1); rc = PEM_write_bio_PUBKEY(pem1.get(), pkey.get()); ASSERT(rc == 1);</code>
Dadurch wird eine PEM-Datei mit dem Namen „rsa-public-1.pem“ erstellt, die den öffentlichen Schlüssel im erforderlichen Format enthält.
Beispiel:
Betrachten Sie das folgende Beispiel, in dem die Variable „publicKey“ einen Schlüssel in dem von .Net nicht erkannten Format enthält:
<code class="cpp">string publicKey = @"-----BEGIN RSA PUBLIC KEY----- ... -----END RSA PUBLIC KEY-----"; CryptoKey key = CryptoKey.FromPublicKey(publicKey, ""); RSA rsa = key.GetRSA();</code>
Ersetzen „publicKey“ mit dem mithilfe des bereitgestellten Codes generierten Schlüssel löst die Ausnahme, die beim Versuch, ein CryptoKey-Objekt zu erstellen, aufgetreten ist.
Das obige ist der detaillierte Inhalt vonWie konvertiert man OpenSSL-RSA-Schlüssel zur Verwendung mit .Net?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!