如何从C#中获取x509证书的数字签名值

时间:2015-04-26 08:30:55

标签: c# digital-signature x509

有谁知道如何使用C#从x509证书(实际上是x509Store而不是从文件验证)中获取数字签名值并在文本框中显示它。我知道GetRawCertDataString()返回整个x509证书的原始数据,其中包括最后一行的数字签名,但我找不到只返回数字签名的命令。

2 个答案:

答案 0 :(得分:1)

您最好的方法是获取ASN.1解析器并提取数字签名,或者执行一些p / invoke。您需要使用CryptDecodeObject函数并将X509_CERT作为lpszStructType参数传递。该函数返回(在pvStructInfo)指向CERT_SIGNED_CONTENT_INFO结构的指针。此结构具有Signature字段,这是一个简单的BIT_BLOB结构,在cbDatapbData字段中包含字节数组(使用Marshal.Copy将字节从非托管内存复制到托管字节数组)。

答案 1 :(得分:0)

    public static string Sign(this X509Certificate2 x509, string message)
    {
        byte[] data = Encoding.UTF8.GetBytes(message);
        byte[] signedData;

        using (MD5 hasher = MD5.Create())
        {
            RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)x509.PrivateKey;
            signedData = rsa.SignData(data, hasher);
        }
        return Convert.ToBase64String(signedData);// +Environment.NewLine + Environment.NewLine; 
        //return ByteArrayToString(signedData); //Convert.ToBase64String(signedData);
    }