有谁知道如何使用C#从x509证书(实际上是x509Store而不是从文件验证)中获取数字签名值并在文本框中显示它。我知道GetRawCertDataString()返回整个x509证书的原始数据,其中包括最后一行的数字签名,但我找不到只返回数字签名的命令。
答案 0 :(得分:1)
您最好的方法是获取ASN.1解析器并提取数字签名,或者执行一些p / invoke。您需要使用CryptDecodeObject函数并将X509_CERT
作为lpszStructType
参数传递。该函数返回(在pvStructInfo
)指向CERT_SIGNED_CONTENT_INFO结构的指针。此结构具有Signature
字段,这是一个简单的BIT_BLOB
结构,在cbData
和pbData
字段中包含字节数组(使用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);
}