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
相关产品推荐
相关产品推荐

