在 .Net 中使用 OpenSSL RSA 金鑰
OpenSSL 提供不同的金鑰格式,導致與不同模組的相容性問題。
問題: .Net 需要格式為「-----BEGIN PUBLIC KEY-----」的金鑰,而不是「-----BEGIN RSA PUBLIC KEY -----” OpenSSL 產生的格式。
解決方案:
使用 PEM_write_bio_PUBKEY 而不是 PEM_write_bio_RSAPublicKey 寫入公鑰。 PEM_write_bio_PUBKEY 包含所需的「SubjectPublicKeyInfo」結構,而 PEM_write_bio_RSAPublicKey 僅輸出公鑰。
將金鑰轉換為所需格式:
將OpenSSL RSA 金鑰轉換為.Net 所需的格式,您可以使用以下程式碼:
<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>
這將建立一個名為「rsa-public-1.pem」的PEM 文件,其中包含所需格式的公鑰。
範例:
考慮以下範例,其中「publicKey」變數儲存.Net 無法辨識的格式的金鑰:
<code class="cpp">string publicKey = @"-----BEGIN RSA PUBLIC KEY----- ... -----END RSA PUBLIC KEY-----"; CryptoKey key = CryptoKey.FromPublicKey(publicKey, ""); RSA rsa = key.GetRSA();</code>
替換使用提供的程式碼產生的金鑰「publicKey」將解決嘗試建立CryptoKey 物件時遇到的異常。
以上是如何轉換 OpenSSL RSA 金鑰以用於 .Net?的詳細內容。更多資訊請關注PHP中文網其他相關文章!