首页 >后端开发 >C++ >如何转换 OpenSSL RSA 密钥以用于 .Net?

如何转换 OpenSSL RSA 密钥以用于 .Net?

DDD
DDD原创
2024-11-04 09:19:30547浏览

How to Convert OpenSSL RSA Keys for Use with .Net?

在 .Net 中使用 OpenSSL RSA 密钥

OpenSSL 提供不同的密钥格式,导致与不同模块的兼容性问题。

问题: .Net 需要格式为“-----BEGIN PUBLIC KEY-----”的密钥,而不是“-----BEGIN RSA PUBLIC KEY-----” OpenSSL 生成的格式。

解决方案:

使用 PEM_write_bio_PUBKEY 而不是 PEM_write_bio_RSAPublicKey 写入公钥。 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 对象时遇到的异常。

以上是如何转换 OpenSSL RSA 密钥以用于 .Net?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn