首頁 > 後端開發 > C++ > 主體

如何轉換 OpenSSL RSA 金鑰以用於 .Net?

DDD
發布: 2024-11-04 09:19:30
原創
448 人瀏覽過

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

在 .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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!