Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menggunakan Kunci RSA OpenSSL dengan .NET?

Bagaimana untuk Menggunakan Kunci RSA OpenSSL dengan .NET?

Patricia Arquette
Lepaskan: 2024-11-04 16:17:02
asal
208 orang telah melayarinya

How to Use an OpenSSL RSA Key with .NET?

Gunakan kunci OpenSSL RSA dengan .Net

Masalah:
Rangka kerja .Net memberikan pengecualian apabila cuba menggunakan kunci awam RSA yang dijana dengan OpenSSL kerana format tidak sepadan. Kuncinya adalah dalam format PKCS#1, manakala .Net menjangkakan format X.509.

Penyelesaian:

Penukaran daripada PKCS#1 kepada X. Format 509:

Untuk menukar kunci awam RSA daripada PKCS#1 kepada format X.509, gunakan fungsi PEM_write_bio_PUBKEY dan bukannya PEM_write_bio_RSAPublicKey. Ini akan mengeluarkan kunci dalam format SubjectPublicKeyInfo dengan OID dan kunci awam.

Selain itu, anda perlu menggunakan EVP_PKEY_set1_RSA untuk menukar kunci RSA kepada EVP_PKEY.

Contoh Kod:

<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>
Salin selepas log masuk

Kod ini menjana pasangan kunci RSA dan menulis kunci awam dalam kedua-dua format ASN.1/DER dan PEM. Anda kemudiannya boleh menggunakan kunci awam berformat X.509 dengan aplikasi .Net anda.

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Kunci RSA OpenSSL dengan .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan