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

C#中使用BouncyCastle库基于口令生成加密RSA公私钥对

C# BouncyCastle 生成带口令加密的PKCS1格式RSA密钥对

实现思路

原有未加密PKCS1密钥对生成逻辑无需重构,仅需在私钥写入PEM环节传入口令与加密算法配置,即可输出符合要求的加密私钥文件,公钥生成逻辑无变化。

前置依赖

  • 项目已引入BouncyCastle库
  • 代码文件引入以下命名空间:
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Security;
using System.IO;

可直接运行的实现代码

// 初始化RSA密钥对生成器,密钥长度按需选择2048/4096
KeyGenerationParameters keyGenParams = new KeyGenerationParameters(new SecureRandom(), 2048);
RsaKeyPairGenerator rsaKeyPairGen = new RsaKeyPairGenerator();
rsaKeyPairGen.Init(keyGenParams);
AsymmetricCipherKeyPair rsaKeyPair = rsaKeyPairGen.GenerateKeyPair();

// 配置私钥加密口令
char[] privateKeyPassphrase = "替换为你的实际访问口令".ToCharArray();

// 写入加密PKCS1格式私钥到文件
using (StreamWriter privateKeyWriter = new StreamWriter("rsa_private_encrypted.pem"))
{
    PemWriter pemWriter = new PemWriter(privateKeyWriter);
    // 指定加密算法为AES-256-CBC,传入口令即可自动输出带加密头的PKCS1私钥
    pemWriter.WriteObject(rsaKeyPair.Private, "AES-256-CBC", privateKeyPassphrase, new SecureRandom());
    pemWriter.Writer.Flush();
}

// 写入公钥到独立文件
using (StreamWriter publicKeyWriter = new StreamWriter("rsa_public.pem"))
{
    PemWriter pemWriter = new PemWriter(publicKeyWriter);
    pemWriter.WriteObject(rsaKeyPair.Public);
    pemWriter.Writer.Flush();
}

结果校验

生成的加密私钥文件满足以下特征即为PKCS1加密格式:

  • 文件头为-----BEGIN RSA PRIVATE KEY-----
  • 文件头区域包含Proc-Type: 4,ENCRYPTED与DEK-Info: AES-256-CBC,xxxx字段

加密私钥读取方法

后续加载加密私钥时,通过自定义口令解析类传入口令即可完成解密加载,示例代码:

// 口令解析辅助类
public class PemPasswordFinder : IPasswordFinder
{
    private readonly char[] _passphrase;
    public PemPasswordFinder(string passphrase) => _passphrase = passphrase.ToCharArray();
    public char[] GetPassword() => _passphrase;
}

// 读取加密私钥
using (StreamReader privateKeyReader = new StreamReader("rsa_private_encrypted.pem"))
{
    PemReader pemReader = new PemReader(privateKeyReader, new PemPasswordFinder("你的私钥口令"));
    AsymmetricCipherKeyPair loadedKeyPair = (AsymmetricCipherKeyPair)pemReader.ReadObject();
}

注意事项

  • 禁止使用Pkcs8Generator生成私钥,该类输出为PKCS8格式,不符合PKCS1格式要求
  • 私钥加密算法可按需替换为AES-128-CBC、3DES等兼容选项,不建议使用DES等弱加密算法
  • 私钥口令建议长度不低于8位,包含大小写、数字与特殊字符,避免弱口令风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:15:38