ホームページ >バックエンド開発 >C++ >.NET で OpenSSL RSA キーを使用するにはどうすればよいですか?

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-04 16:17:02203ブラウズ

How to Use an OpenSSL RSA Key with .NET?

.Net で OpenSSL RSA キーを使用する

問題:
.Net フレームワークは、次の場合に例外をスローします。形式の不一致により、OpenSSL で生成された RSA 公開キーを使用しようとしました。キーは PKCS#1 形式ですが、.Net は X.509 形式を想定しています。

解決策:

PKCS#1 から X への変換。 509 形式:

RSA 公開キーを PKCS#1 から X.509 形式に変換するには、PEM_write_bio_RSAPublicKey の代わりに PEM_write_bio_PUBKEY 関数を使用します。これにより、キーが OID と公開キーを含む SubjectPublicKeyInfo 形式で出力されます。

さらに、EVP_PKEY_set1_RSA を使用して RSA キーを EVP_PKEY に変換する必要があります。

例コード:

<code class="c++">// Include necessary headers
#include <openssl/bn.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/bio.h>
#include <openssl/x509.h>

#include <cassert>
#define ASSERT assert

using BN_ptr = std::unique_ptr<BIGNUM, decltype(&amp;::BN_free)>;
using RSA_ptr = std::unique_ptr<RSA, decltype(&amp;::RSA_free)>;
using EVP_KEY_ptr = std::unique_ptr<EVP_PKEY, decltype(&amp;::EVP_PKEY_free)>;
using BIO_FILE_ptr = std::unique_ptr<BIO, decltype(&amp;::BIO_free)>;

int main(int argc, char* argv[])
{
    int rc;

    RSA_ptr rsa(RSA_new(), ::RSA_free);
    BN_ptr bn(BN_new(), ::BN_free);

    BIO_FILE_ptr pem1(BIO_new_file("rsa-public-1.pem", "w"), ::BIO_free);
    BIO_FILE_ptr der1(BIO_new_file("rsa-public-1.der", "w"), ::BIO_free);

    rc = BN_set_word(bn.get(), RSA_F4);
    ASSERT(rc == 1);

    // Generate key
    rc = RSA_generate_key_ex(rsa.get(), 2048, bn.get(), NULL);
    ASSERT(rc == 1);

    // 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 and public key in ASN.1/DER
    rc = i2d_RSA_PUBKEY_bio(der1.get(), rsa.get());
    ASSERT(rc == 1);

    // Write SubjectPublicKeyInfo with OID and public key in PEM
    rc = PEM_write_bio_PUBKEY(pem1.get(), pkey.get());
    ASSERT(rc == 1);

    return 0;
}</code>

このコードは、RSA キー ペアを生成し、公開キーを ASN.1/DER 形式と PEM 形式の両方で書き込みます。これで、.Net アプリケーションで X.509 形式の公開キーを使用できるようになります。

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

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