编程语言
首页 > 编程语言> > 如何在 C# 中实现获取证书私钥字符串?

如何在 C# 中实现获取证书私钥字符串?

作者:互联网

示例代码

using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        // 证书文件路径和密码
        string certPath = @"C:\path\to\your\apiclient_cert.p12"; // 替换为实际证书路径
        string certPassword = "YOUR_CERT_PASSWORD"; // 替换为实际证书密码

        // 获取私钥字符串
        string privateKeyString = GetPrivateKeyString(certPath, certPassword);
        Console.WriteLine("Private Key String:");
        Console.WriteLine(privateKeyString);
    }

    public static string GetPrivateKeyString(string certPath, string certPassword)
    {
        // 加载证书
        X509Certificate2 certificate = new X509Certificate2(certPath, certPassword, X509KeyStorageFlags.MachineKeySet);

        // 获取私钥并转为字符串
        using (RSA rsa = certificate.GetRSAPrivateKey())
        {
            if (rsa == null)
                throw new InvalidOperationException("Unable to retrieve private key.");

            // 导出私钥为字节数组
            var privateKeyBytes = rsa.ExportRSAPrivateKey(); // .NET 5.0 或更高版本使用
            // var privateKeyBytes = rsa.ExportParameters(true).ToString(); // 在 .NET Framework 中可用

            // 转换为 PEM 格式
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("-----BEGIN PRIVATE KEY-----");
            sb.AppendLine(Convert.ToBase64String(privateKeyBytes, Base64FormattingOptions.InsertLineBreaks));
            sb.AppendLine("-----END PRIVATE KEY-----");

            return sb.ToString();
        }
    }
}

C#

关键注意事项

  1. PEM 格式:示例中的代码生成了 PEM 格式的私钥,适用于许多需要此格式的场景。

  2. RSA私钥导出

    • 在 .NET Core 或 .NET 5.0 及更高版本中,使用 rsa.ExportRSAPrivateKey() 方法。
    • 对于较旧的 .NET Framework 版本,您可能无法直接导出为字节数组,需要手动构建或使用 RSAParameters
  3. 证书加载

    • 确保证书路径和密码正确,以成功加载证书。

注意事项

标签:
来源: