Maison > Article > développement back-end > Comment utiliser une clé OpenSSL RSA avec .NET ?
Utiliser la clé OpenSSL RSA avec .Net
Problème :
Le framework .Net lève une exception lorsque tentative d'utilisation d'une clé publique RSA générée avec OpenSSL en raison d'une incompatibilité de format. La clé est au format PKCS#1, alors que .Net attend un format X.509.
Solution :
Conversion de PKCS#1 vers X. Format 509 :
Pour convertir la clé publique RSA du format PKCS#1 au format X.509, utilisez la fonction PEM_write_bio_PUBKEY au lieu de PEM_write_bio_RSAPublicKey. Cela affichera la clé au format SubjectPublicKeyInfo avec un OID et la clé publique.
De plus, vous devrez utiliser EVP_PKEY_set1_RSA pour convertir la clé RSA en EVP_PKEY.
Exemple 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>
Ce code génère une paire de clés RSA et écrit la clé publique aux formats ASN.1/DER et PEM. Vous pouvez ensuite utiliser la clé publique au format X.509 avec votre application .Net.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!