4

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

提前致谢!

4

1 回答 1

3

您从您的 will 的属性中获得的AsymmetricAlgorithm对象实际上是从 派生的各种类型之一的实例,例如,等...PrivateKeyX509Certificate2AsymmetricAlgorithmRSACryptoServiceProviderDSACryptoServiceProvider

您将需要确定您正在处理的私钥的类型,并适当地进行转换。施放后,您应该可以调用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);
}
于 2011-10-24T15:16:23.500 回答