>백엔드 개발 >C++ >OpenSSL RSA 키를 .NET용 X.509 형식으로 변환하는 방법은 무엇입니까?

OpenSSL RSA 키를 .NET용 X.509 형식으로 변환하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-05 01:37:02459검색

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 인코딩 키는 두 가지 형식을 사용하여 작성할 수 있습니다.

  • Traditional(SubjectPublicKeyInfo): 알고리즘의 OID와 공개 키를 포함합니다.
  • PKCS(공개 키만): 공개 키만 포함합니다. key.

.NET 키 형식 지원

.NET은 ASN.1/DER 인코딩 키와 SubjectPublicKeyInfo 구조를 작성하는 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 -openssl 사용)

위 내용은 OpenSSL RSA 키를 .NET용 X.509 형식으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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