我们使用C#代码我们用.p12文件构建X509Certificate2,在构造函数中我们插入证书的路径,证书的密码。我们还将其标记为可导出,如下所示:
X509Certificate2 x509Certificate2 = new X509Certificate2
("...\\MyCerificate.p12", "P@ssw0rd", X509KeyStorageFlags.Exportable);
我们通过以下方式获得私钥作为AsymmetricAlgorithm格式:
x509Certificate2.PrivateKey
现在,我们希望将证书中的私钥作为 Base64 格式获取 - 但我们不知道该怎么做,这对我们来说非常重要。
答案 0 :(得分:4)
重要的问题是为什么 base64 ?
如果这是您自己的应用程序,那么您可以将私钥保存为XML字符串(更容易: - )。
string xml = x509Certificate2.PrivateKey.ToXmlString (true);
如果您想要 base64 (同样仅适用于您的应用程序),您可以导出密钥(RSAParameters),然后连接每个byte[]
并将合并的输出转换为base64字符串。
但是如果你想与需要 base64 私钥的其他应用程序互操作,那么你需要知道格式(在 base64 字符串内)。例如。在许多情况下,私钥是PEM编码的(具有特殊页眉/页脚的base64,X509Certificate
的{{3}})。
如果您正在寻找什么,那么您需要先在example结构中对私钥进行编码,然后将其转入base64并添加页眉/页脚。你可以找到一些有用的代码来PKCS#8 Mono.Security.dll(Mono项目的MIT.X11许可代码)。
答案 1 :(得分:2)
您只需使用X509Certificate2的PrivateKey属性即可。 实际返回的私钥实现取决于证书中使用的算法 - 通常是RSA:
rsaObj = (RSACryptoServiceProvider)myCertificate.PrivateKey;
之后,您应该能够从其ExportParameters属性中获取RSA密钥信息。
答案 2 :(得分:0)
您可以使用.NET的OpenSSL库来做到这一点:
using DidiSoft.OpenSsl;
...
X509Certificate2 x509Certificate2 = new X509Certificate2
("...\\MyCerificate.p12", "P@ssw0rd", X509KeyStorageFlags.Exportable);
PrivateKey privKey = PrivateKey.Load(x509Certificate2.PrivateKey);
bool withNewLines = true;
string base64PrivateKey = privKey.ToBase64String(withNewLines);
答案 3 :(得分:-3)
如果您唯一的问题是获取私钥Base64编码,您可以这样做:
var privateKey = x509Certificate2.PrivateKey;
var encoding = new System.Text.ASCIIEncoding();
var base64String = Convert.ToBase64String(encoding.GetBytes(privateKey.ToString()));