ホームページ  >  記事  >  バックエンド開発  >  OpenSSL RSA キーを .Net で使用できるように変換するにはどうすればよいですか?

OpenSSL RSA キーを .Net で使用できるように変換するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-04 09:19:30535ブラウズ

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

.Net での OpenSSL RSA キーの使用

OpenSSL はさまざまなキー形式を提供するため、さまざまなモジュールとの互換性の問題が発生します。

問題: .Net では、「-----BEGIN RSA PUBLIC KEY-----」ではなく、「-----BEGIN PUBLIC KEY-----」形式のキーが必要です。 OpenSSL によって生成された形式。

解決策:

公開キーを書き込むには、PEM_write_bio_RSAPublicKey の代わりに PEM_write_bio_PUBKEY を使用します。 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>

Replacing提供されたコードを使用して生成されたキーを含む「publicKey」は、CryptoKey オブジェクトの作成中に発生した例外を解決します。

以上がOpenSSL RSA キーを .Net で使用できるように変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。