将私钥导出为字节数组的最佳方法

本文关键字:数组 最佳 方法 字节数 字节 私钥 | 更新日期: 2023-09-27 18:12:26

我编写的应用程序必须从用户获取私钥,然后将其作为base64发送到另一个应用程序,我想允许用户插入带有私钥的X509Certificate2。现在我的大问题是如何将私钥从AsimetricAlgorithm对象转换为包含所有私钥的bate数组?我看到我可以使用openSSl -将所有证书转换为pem文件,然后转换为RSA文件-并读取私钥,但我不想使用它,因为:我不想在文件上使用,3P库,它不安全等等。有人知道另一种方法吗?

提前感谢!

将私钥导出为字节数组的最佳方法

您从X509Certificate2PrivateKey属性中获得的AsymmetricAlgorithm对象实际上将是AsymmetricAlgorithm派生的各种类型之一的实例,例如RSACryptoServiceProvider, DSACryptoServiceProvider等…

您需要确定正在处理的私钥的类型,并适当地转换它。转换后,您应该能够调用ExportCspBlob(true)来获取私钥数据。

示例(假设有RSA密钥):

public string GetRSAPrivateKeyBase64(X509Certificate2 certificate)
{
    var privateKey = certificate.PrivateKey as RSACryptoServiceProvider;
    if (privateKey == null) throw new Exception("Not an RSA private key");
    // Export the CSP blob, including private key parameters 
    var cspBlob = privateKey.ExportCspBlob(true);
    return Convert.ToBase64String(cspBlob);
}