You need to enable JavaScript to run this app. C#生成带口令、AES加密的PEM格式RSA密钥对方案咨询
优惠活动
大模型
产品
解决方案
定价
更多

C#生成带口令、AES加密的PEM格式RSA密钥对方案咨询

可行实现方案

方案1:.NET 7+ 原生实现(无需第三方依赖)

.NET 7及更高版本内置了加密PEM导出能力,是优先级最高的实现方案,直接支持AES-128-CBC、AES-256-CBC对称加密私钥:

using System.Security.Cryptography;

// 生成指定长度的RSA密钥对
using var rsa = RSA.Create(2048);

// 配置加密规则:AES-256-CBC加密、SHA256哈希、PBKDF2迭代次数20万(可按需调整)
var encryptionParams = new PbeParameters(
    PbeEncryptionAlgorithm.Aes256Cbc,
    HashAlgorithmName.SHA256,
    200000);

// 替换为你的自定义密码短语
string passPhrase = "your_secure_passphrase_here";

// 导出加密后的私钥PEM格式
string encryptedPrivateKeyPem = rsa.ExportEncryptedPkcs8PrivateKeyPem(passPhrase, encryptionParams);

// 导出公钥PEM格式
string publicKeyPem = rsa.ExportSubjectPublicKeyInfoPem();

生成的密钥符合标准PKCS8规范,可通过openssl rsa -in 私钥文件路径 -check命令验证,输入密码短语后可正常解密。


方案2:BouncyCastle 开源实现(兼容低版本.NET)

如果需要兼容.NET 6及更低版本、.NET Framework,可以使用官方维护的开源BouncyCastle库实现:

你之前测试BouncyCastle未找到对应实现,大概率是使用了已停止维护的非官方旧版包,或是类名匹配错误,当前官方维护的BouncyCastle.Cryptography包已完整移植Java版的全部加密能力,C#版对应Pkcs8EncryptorBuilder类即可实现私钥加密。

实现步骤

  1. 安装Nuget包:BouncyCastle.Cryptography
  2. 参考代码实现:
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Security;
using System.IO;

// 生成2048位RSA密钥对
var rsaGenerator = new RsaKeyPairGenerator();
rsaGenerator.Init(new KeyGenerationParameters(new SecureRandom(), 2048));
AsymmetricCipherKeyPair keyPair = rsaGenerator.GenerateKeyPair();

// 配置私钥加密规则:AES-256-CBC、自定义密码短语、迭代次数20万
string passPhrase = "your_secure_passphrase_here";
var encryptor = new Pkcs8EncryptorBuilder(Pkcs8EncryptorBuilder.AES256_CBC)
    .SetPassword(passPhrase.ToCharArray())
    .SetIterationCount(200000)
    .Build();

// 导出加密后的私钥PEM
using var privateTextWriter = new StringWriter();
var privatePemWriter = new PemWriter(privateTextWriter);
privatePemWriter.WriteObject(keyPair.Private, encryptor, new SecureRandom());
privatePemWriter.Writer.Flush();
string encryptedPrivateKeyPem = privateTextWriter.ToString();

// 导出公钥PEM
using var publicTextWriter = new StringWriter();
var publicPemWriter = new PemWriter(publicTextWriter);
publicPemWriter.WriteObject(keyPair.Public);
publicPemWriter.Writer.Flush();
string publicKeyPem = publicTextWriter.ToString();

如果需要生成OpenSSL传统格式的加密私钥,调整PemWriter的写入参数即可,BouncyCastle已原生支持该能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 23:45:04