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类即可实现私钥加密。
实现步骤
- 安装Nuget包:
BouncyCastle.Cryptography - 参考代码实现:
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
相关产品推荐
相关产品推荐

