You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 5+ 跨平台生成RSA密钥对 实现openssl genrsa等价功能

C# 跨平台实现OpenSSL genrsa 生成RSA密钥功能

你不需要手动实现GetBytes方法解析RSA参数,.NET 5及以上版本已经提供了跨平台的内置RSA密钥PEM导出API,完全兼容OpenSSL生成的格式,支持Windows/Linux/macOS全平台运行。
你提到的openssl genrsa -out keypair.pem 2048命令默认生成的是PKCS#1格式的未加密RSA私钥PEM文件,对应实现方案如下:

最优实现方案(推荐)

直接使用.NET内置的导出方法,无需手动处理密钥参数,兼容性和可靠性更高。

.NET 7 及以上版本(最简化写法)

using System.Security.Cryptography;

string outputPath = "keypair.pem";
// 生成2048位RSA密钥
using var rsa = RSA.Create(2048);
// 直接导出OpenSSL兼容的PKCS#1格式私钥PEM文本
string pemContent = rsa.ExportPkcs1PrivateKeyPem();
// 写入文件即可
await File.WriteAllTextAsync(outputPath, pemContent);

如果需要生成加密的私钥(对应openssl genrsa加加密参数的场景),使用以下代码:

using System.Security.Cryptography;

string outputPath = "keypair.pem";
string encryptionPassword = "你的自定义密码";
using var rsa = RSA.Create(2048);
// 导出AES256加密的私钥PEM
string encryptedPem = rsa.ExportEncryptedPkcs8PrivateKeyPem(
    encryptionPassword,
    new PbeParameters(PbeEncryptionAlgorithm.Aes256Cbc, HashAlgorithmName.SHA256, 100000)
);
await File.WriteAllTextAsync(outputPath, encryptedPem);

.NET 5/6 兼容版本

如果项目目标框架为.NET 5或6,没有直接导出PEM字符串的API,可以先导出DER编码的字节流,再手动封装为PEM格式:

using System.Security.Cryptography;
using System.Text;

string outputPath = "keypair.pem";
using var rsa = RSA.Create(2048);
// 导出PKCS#1格式DER编码字节
byte[] derBytes = rsa.ExportPkcs1PrivateKey();
// 转换为PEM格式
string base64Str = Convert.ToBase64String(derBytes, Base64FormattingOptions.InsertLineBreaks);
string pemContent = $"-----BEGIN RSA PRIVATE KEY-----\n{base64Str}\n-----END RSA PRIVATE KEY-----\n";
await File.WriteAllTextAsync(outputPath, pemContent);

注意:以上实现完全依赖.NET运行时内置加密能力,无需安装额外依赖,生成的PEM文件和openssl genrsa -out keypair.pem 2048命令的输出完全一致,可直接通用。
你原代码中通过导出RSAParameters手动转字节流的思路需要自行实现ASN.1格式序列化,逻辑复杂易出错,不推荐使用。

内容的提问来源于stack exchange,提问作者innopal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:48:00