>백엔드 개발 >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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.