Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Menukar Kunci Awam OpenSSL RSA kepada Format Serasi .Net?
Gunakan OpenSSL RSA Key dengan .Net
Apabila menjana pasangan kunci awam-swasta menggunakan RSA_generate_key(), OpenSSL mengeluarkan kunci awam dalam format berikut:
-----BEGIN RSA PUBLIC KEY----- ... -----END RSA PUBLIC KEY-----
Walau bagaimanapun, sesetengah modul dalam .Net memerlukan kunci dalam format ini:
-----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY-----
Untuk menukar kunci kepada format yang diperlukan, gunakan PEM_write_bio_PUBKEY dan bukannya PEM_write_bio_RSAPublicKey. Yang pertama menulis SubjectPublicKeyInfo, termasuk OID dan kunci awam.
Untuk menukar kunci, ikut langkah berikut:
Contoh C
Atur cara C berikut menunjukkan penukaran :
<code class="cpp">#include <memory> #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 pem2(BIO_new_file("rsa-public-2.pem", "w"), ::BIO_free); BIO_FILE_ptr der1(BIO_new_file("rsa-public-1.der", "w"), ::BIO_free); BIO_FILE_ptr der2(BIO_new_file("rsa-public-2.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 just the public key in ASN.1/DER // Load with d2i_RSAPublicKey_bio rc = i2d_RSAPublicKey_bio(der1.get(), rsa.get()); ASSERT(rc == 1); // Write just the public key in PEM // Load with PEM_read_bio_RSAPublicKey rc = PEM_write_bio_RSAPublicKey(pem1.get(), rsa.get()); ASSERT(rc == 1); // Write SubjectPublicKeyInfo with OID and public key in ASN.1/DER // Load with d2i_RSA_PUBKEY_bio rc = i2d_RSA_PUBKEY_bio(der2.get(), rsa.get()); ASSERT(rc == 1); // Write SubjectPublicKeyInfo with OID and public key in PEM // Load with PEM_read_bio_PUBKEY rc = PEM_write_bio_PUBKEY(pem2.get(), pkey.get()); ASSERT(rc == 1); return 0; }</code>
Atas ialah kandungan terperinci Bagaimana untuk Menukar Kunci Awam OpenSSL RSA kepada Format Serasi .Net?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!