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

OpenSSL RSA キーを .NET 用の X.509 形式に変換するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-05 01:37:02388ブラウズ

How to Convert OpenSSL RSA Keys to X.509 Format for .NET?

.NET での OpenSSL RSA キーの使用

OpenSSL RSA_generate_key() を使用して RSA キー ペアを作成すると、公開キーと秘密キーが生成されます。デフォルトでは pkcs#1 形式です。ただし、.NET は x509 形式であることを想定しています。

PEM エンコード形式

PEM エンコードされたキーは、次の 2 つの形式を使用して書き込むことができます:

  • Traditional (SubjectPublicKeyInfo): アルゴリズムの OID と公開鍵が含まれます。
  • PKCS (just public key): 公開鍵のみが含まれますkey.

.NET でのキー形式のサポート

.NET は、SubjectPublicKeyInfo 構造体を書き込む ASN.1/DER エンコードされたキーと PEM エンコードされたキーの両方をサポートします。

X509 形式への変換

pkcs#1 公開鍵を x509 形式に変換するには、C コードで PEM_write_bio_RSAPublicKey の代わりに PEM_write_bio_PUBKEY を使用します。これにより、SubjectPublicKeyInfo 構造体が書き込まれます。

コード例

<code class="cpp">...
// 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 in PEM
// Load with PEM_read_bio_PUBKEY
rc = PEM_write_bio_PUBKEY(pem2.get(), pkey.get());
ASSERT(rc == 1);
...</code>

追加メモ

  • 秘密キーを保存するメッセージの復号化に必要なため、安全に保護されます。
  • EVP_PKEY_set1_RSA の set1 関数は、二重解放エラーを防ぐために参照カウントをインクリメントします。

関連リンク

  • OpenSSL を使用した RSA 秘密キーの生成: [openssl を使用して RSA 秘密キーを生成するには?](https://stackoverflow.com/questions/26154252/how-to-generate-rsa-private-key) -using-openssl)

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

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