Maison  >  Article  >  développement back-end  >  Comment utiliser une clé OpenSSL RSA avec .NET ?

Comment utiliser une clé OpenSSL RSA avec .NET ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-04 16:17:02124parcourir

How to Use an OpenSSL RSA Key with .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(&amp;::BN_free)>;
using RSA_ptr = std::unique_ptr<RSA, decltype(&amp;::RSA_free)>;
using EVP_KEY_ptr = std::unique_ptr<EVP_PKEY, decltype(&amp;::EVP_PKEY_free)>;
using BIO_FILE_ptr = std::unique_ptr<BIO, decltype(&amp;::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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn