Heim >Backend-Entwicklung >C++ >Wie verwende ich einen OpenSSL-RSA-Schlüssel mit .NET?
OpenSSL-RSA-Schlüssel mit .Net verwenden
Problem:
Das .Net-Framework löst eine Ausnahme aus, wenn Aufgrund einer Formatinkongruenz wird versucht, einen mit OpenSSL generierten öffentlichen RSA-Schlüssel zu verwenden. Der Schlüssel liegt im PKCS#1-Format vor, während .Net ein X.509-Format erwartet.
Lösung:
Konvertierung von PKCS#1 nach X. 509-Format:
Um den öffentlichen RSA-Schlüssel vom PKCS#1- in das X.509-Format zu konvertieren, verwenden Sie die Funktion PEM_write_bio_PUBKEY anstelle von PEM_write_bio_RSAPublicKey. Dadurch wird der Schlüssel im SubjectPublicKeyInfo-Format mit einer OID und dem öffentlichen Schlüssel ausgegeben.
Zusätzlich müssen Sie EVP_PKEY_set1_RSA verwenden, um den RSA-Schlüssel in einen EVP_PKEY umzuwandeln.
Beispiel Code:
<code class="c++">// Include necessary headers #include <openssl/bn.h> #include <openssl/rsa.h> #include <openssl/pem.h> #include <openssl/bio.h> #include <openssl/x509.h> #include <cassert> #define ASSERT assert using BN_ptr = std::unique_ptr<BIGNUM, decltype(&::BN_free)>; using RSA_ptr = std::unique_ptr<RSA, decltype(&::RSA_free)>; using EVP_KEY_ptr = std::unique_ptr<EVP_PKEY, decltype(&::EVP_PKEY_free)>; using BIO_FILE_ptr = std::unique_ptr<BIO, decltype(&::BIO_free)>; int main(int argc, char* argv[]) { int rc; RSA_ptr rsa(RSA_new(), ::RSA_free); BN_ptr bn(BN_new(), ::BN_free); BIO_FILE_ptr pem1(BIO_new_file("rsa-public-1.pem", "w"), ::BIO_free); BIO_FILE_ptr der1(BIO_new_file("rsa-public-1.der", "w"), ::BIO_free); rc = BN_set_word(bn.get(), RSA_F4); ASSERT(rc == 1); // Generate key rc = RSA_generate_key_ex(rsa.get(), 2048, bn.get(), NULL); ASSERT(rc == 1); // Convert RSA key to PKEY EVP_KEY_ptr pkey(EVP_PKEY_new(), ::EVP_PKEY_free); rc = EVP_PKEY_set1_RSA(pkey.get(), rsa.get()); ASSERT(rc == 1); // Write SubjectPublicKeyInfo with OID and public key in ASN.1/DER rc = i2d_RSA_PUBKEY_bio(der1.get(), rsa.get()); ASSERT(rc == 1); // Write SubjectPublicKeyInfo with OID and public key in PEM rc = PEM_write_bio_PUBKEY(pem1.get(), pkey.get()); ASSERT(rc == 1); return 0; }</code>
Dieser Code generiert ein RSA-Schlüsselpaar und schreibt den öffentlichen Schlüssel sowohl im ASN.1/DER- als auch im PEM-Format. Anschließend können Sie den X.509-formatierten öffentlichen Schlüssel mit Ihrer .Net-Anwendung verwenden.
Das obige ist der detaillierte Inhalt vonWie verwende ich einen OpenSSL-RSA-Schlüssel mit .NET?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!