Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menukar Kunci RSA OpenSSL untuk Digunakan dengan .Net?

Bagaimana untuk Menukar Kunci RSA OpenSSL untuk Digunakan dengan .Net?

DDD
DDDasal
2024-11-04 09:19:30450semak imbas

How to Convert OpenSSL RSA Keys for Use with .Net?

Menggunakan OpenSSL RSA Key dengan .Net

OpenSSL menawarkan pelbagai format utama, menyebabkan isu keserasian dengan modul berbeza.

Isu: .Net memerlukan kunci dalam format "-----MULAKAN KUNCI AWAM-----", dan bukannya "-----MULAKAN KUNCI AWAM RSA-----" format yang dijana oleh OpenSSL.

Penyelesaian:

Gunakan PEM_write_bio_PUBKEY dan bukannya PEM_write_bio_RSAPublicKey untuk menulis kunci awam. PEM_write_bio_PUBKEY termasuk struktur "SubjectPublicKeyInfo" yang diperlukan, manakala PEM_write_bio_RSAPublicKey hanya mengeluarkan kunci awam.

Menukar Kunci kepada Format Yang Diperlukan:

Untuk menukar RSL kepada OpenSSL format yang diperlukan oleh .Net, anda boleh menggunakan kod berikut:

<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>

Ini akan mencipta fail PEM bernama "rsa-public-1.pem" yang mengandungi kunci awam dalam format yang diperlukan.

Contoh:

Pertimbangkan contoh berikut, di mana pembolehubah "publicKey" memegang kunci dalam format yang tidak dikenali oleh .Net:

<code class="cpp">string publicKey = @"-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----";

CryptoKey key = CryptoKey.FromPublicKey(publicKey, "");
RSA rsa = key.GetRSA();</code>

Menggantikan "publicKey" dengan kunci yang dijana menggunakan kod yang disediakan akan menyelesaikan pengecualian yang dihadapi semasa cuba mencipta objek CryptoKey.

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

Kenyataan:
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