.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 サイトの他の関連記事を参照してください。