.NET 8下生成PuTTY兼容带密码私钥的方案咨询
生成PuTTY兼容的加密RSA私钥(.NET 8)
你之前用ExportEncryptedPkcs8PrivateKeyPem生成的加密PKCS#8 PEM无法被PuTTYgen识别,是因为PuTTYgen对PKCS#8的加密参数兼容性有限。下面提供两种适配.NET 8的解决方案:
方案1:原生.NET生成加密OpenSSH格式私钥(可导入PuTTYgen转换)
.NET 8原生支持导出加密的OpenSSH格式私钥,这种格式可以直接被PuTTYgen导入并转换为PPK。代码如下:
string passphrase = "foo"; using (RSA rsa = RSA.Create(4096)) { return rsa.ExportEncryptedOpenSshPrivateKey( passphrase, new PbeParameters(PbeEncryptionAlgorithm.Aes256Cbc, HashAlgorithmName.SHA256, 100000)); }
使用方式:
- 将生成的内容保存为后缀为
.pem或.txt的文件 - 打开PuTTYgen,点击「Load」,文件类型选择「All Files」,选中该文件
- 输入密码后即可导入,随后可点击「Save private key」保存为PPK格式
方案2:使用Renci.SshNet直接生成PPK格式
如果需要直接生成PuTTY专属的PPK格式,推荐使用Renci.SshNet库,它可以直接输出标准PPK内容,无需转换。
步骤:
- 安装NuGet包:
Install-Package Renci.SshNet
- 编写代码:
using Renci.SshNet; using Renci.SshNet.Security; string passphrase = "foo"; using (RSA rsa = RSA.Create(4096)) { // 将.NET RSA参数转换为Renci的RsaKey对象 var rsaKey = new RsaKey(rsa.ExportParameters(true)); // 生成带密码加密的PPK内容 var ppkContent = rsaKey.ToPrivateKey(passphrase); return ppkContent; }
说明:生成的内容直接保存为.ppk文件,即可被PuTTY或PuTTYgen直接使用,加密方式与PuTTYgen原生生成的PPK一致。
内容的提问来源于stack exchange,提问作者maxmoore14
相关产品推荐
相关产品推荐

