将.NET XML格式的DSA非对称密钥转换为PEM格式。

6
我有一个使用DSACryptoServiceProvider.ToXmlString导出的DSA私钥,并且我需要将其转换为PEM格式("file.pem"),以便我可以使用openssl_pkey_get_private函数在PHP中打开它。
如何完成这个任务?
如果需要,解决方案可以使用DSACryptoServiceProvider.ExportCspBlob方法,我只需要转换密钥即可。
1个回答

10

使用bouncycastle C#库的DotNetUtilities类,相当容易。

DSACryptoServiceProvider dsa = new DSACryptoServiceProvider(1024);
AsymmetricCipherKeyPair dsaKey = DotNetUtilities.GetDsaKeyPair(dsa);
using (StreamWriter sw = new StreamWriter("dsa.pem"))
{
    PemWriter pw = new PemWriter(sw);
    pw.WriteObject(dsaKey);
}

1
+1,我只是惊讶于没有直接的方法可以使用纯.NET框架来完成这个任务(不需要额外的外部库)。 - Paya
嗯,PEM格式并不是真正的标准,更多地是一种事实上的标准。 - President James K. Polk
使用.NET 4.5和最新的NuGet BouncyCastle(1.7.0)运行此代码时,调用pw.WriteObject(dsaKey)会导致StackOverflowException异常。我还尝试过使用.NET 3.0、3.5和4.0,但问题依旧存在。有什么想法吗? - Oran Dennison
解决方案:回退到1.6.1版本。不再出现StackOverflowException。 - Oran Dennison
@Oran:请在bouncycastle.org上提交一个错误报告。谢谢。 - President James K. Polk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接