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(&::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>
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!