在 .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中文网其他相关文章!