/ / C#でx509証明書からデジタル署名の値を取得する方法 - c#、デジタル署名、x509

C#のx509証明書からデジタル署名値を取得する方法 - c#、デジタル署名、x509

誰もがC#でそれが可能である方法を知っていますかx509証明書(実際にはx509Storeにあり、ファイルから検証しない)からデジタル署名値を取得し、それをたとえばテキストボックスに表示します。 GetRawCertDataString()が最後の行にデジタル署名を含むx509証明書全体の生データを返すことを知っていますが、デジタル署名のみを返すコマンドを見つけることができません。

回答:

回答№1は1

あなたの最善の方法は、ASN.1パーサーを入手してデジタル署名を抽出するか、またはp / invokeを行うことです。あなたが使用する必要があります CryptDecodeObject 機能して合格 X509_CERT として lpszStructType パラメータ関数は pvStructInfoへのポインタ CERT_SIGNED_CONTENT_INFO 構造。この構造は Signature 単純な分野 BIT_BLOB バイト配列を含む構造体 cbData そして pbData フィールド(使用 Marshal.Copy アンマネージメモリからマネージドバイト配列にバイトをコピーします。


回答№2の場合は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);
}