.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>
교체 제공된 코드를 사용하여 생성된 키가 포함된 "publicKey"는 CryptoKey 개체를 생성하는 동안 발생한 예외를 해결합니다.
위 내용은 .Net에서 사용하기 위해 OpenSSL RSA 키를 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!