验证.NET中的电子签名

时间:2013-10-24 08:48:10

标签: c# .net electronic-signature

我有一系列问题:

  1. .p7s文件包含什么内容?我读到它通常是发送到电子邮件的加密邮件,但在我的情况下,我的硬盘上有一个文件和一个.p7s文件。该文件比.p7s大得多,所以我想知道它里面有什么(当然以后如何使用它)。
  2. 2.这个问题的发生主要是因为我没有1的鼻子。 - 如果我以字节数组的形式获得我的公钥,我该如何在C#中验证签名?我在互联网上找到了这个,但同样,它使用了一些从电子邮件中获取的文本,老实说我不知道​​发生了什么:

    public static bool Verify(byte[] signature, string text)
            {
                X509Certificate2 certificate = new X509Certificate2(@"D:\My-CV.docx.p7s");
    
                if (signature == null)
                    throw new ArgumentNullException("signature");
                if (certificate == null)
                    throw new ArgumentNullException("certificate");
    
                //hash the text 
                // Methode 3 for Hashing
                System.Security.Cryptography.SHA1 hash3 = System.Security.Cryptography.SHA1.Create();
                System.Text.UnicodeEncoding encoder = new System.Text.UnicodeEncoding();
                byte[] combined = encoder.GetBytes(text);
                byte[] hash3byte = hash3.ComputeHash(combined);
    
                //Adding the text from the email, to a contentInfo 
                ContentInfo content = new ContentInfo(hash3byte);
    
                // decode the signature
                SignedCms verifyCms = new SignedCms(content, true);
                verifyCms.Decode(signature);
    
                // verify it
                try
                {
                    verifyCms.CheckSignature(new X509Certificate2Collection(certificate), false);
                    return true;
                }
                catch (CryptographicException)
                {
                    return false;
                }
            } 
    

    有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

.p7s文件包含文档的签名。内容未加密,但看起来像。

文档文件要大得多,因为它包含日期,.p7s是签名。

要检查签名,您需要签署文档的证书的公共部分。

您可以查看这两个帖子来检查签名:

最后一件事是从p7s文件加载签名数据。 我做了一些搜索,然后回复你。