【问题标题】:Determining if a pdf file has a digital signature in c# without verifying the signature在不验证签名的情况下确定pdf文件是否在c#中具有数字签名
【发布时间】:2018-05-26 22:17:24
【问题描述】:

有什么方法可以检查 PDF 文件是否有数字签名?

【问题讨论】:

  • 您使用什么签名格式?使用 CMS / CAdES,您可以查看第一个字节以查看它是否为 ASN.1。使用 XMLDsig,您可以查看它是否包含数字签名的 XSD。使用 PDF,您应该转到签名的保留字节。对于大文件,我建议使用分离的签名文件
  • 确实,目前这个问题太宽泛了。您甚至可以在特定位置拥有自己的带有签名的文件格式。对于数据块是否包含签名没有一般意义 - 它是特定于文件格式的。
  • 是的,同意这个问题太宽泛了,我编辑了。
  • 现在这个问题跑题了。 PDF 已经支持数字签名。您要求人们推荐一个用于 C# 的 PDF 库,它可以告诉您文件是否包含签名。您是否尝试过谷歌搜索?此外,在没有验证的情况下简单地检查签名的存在有什么意义?您是否要接受仍包含原始签名的修改文档?
  • 顺便说一句,如果你用谷歌搜索PDF C# signature,第一个结果是一个链接到 iTextSharp 的 SO 问题。还有很多其他选择

标签: c# file digital-signature


【解决方案1】:

如果您唯一需要知道的是验证其是否已签名,您可以这样做:

using (PdfReader reader = new PdfReader(documentByteArray)
{
    if (reader.AcroFields.GetSignatureNames().Count > 0)
    {
        // something if its signed
    }
}

【讨论】:

    【解决方案2】:

    Free Spire.PDF 库提供了无需验证即可检查 PDF 文件是否具有数字签名的功能。您可以从 NuGet 包管理器获取 Free Spire.PDF dll 并参考以下代码。

    //Load PDF file
    PdfDocument pdf = new PdfDocument();
    pdf.LoadFromFile("Input.pdf");
    
    //Gets the loaded form in the PDF file
    PdfFormWidget form = pdf.Form as PdfFormWidget;
    
    //Determine if there is any signature field among the form fields and whether it contains digital signature
    for (int i = 0; i < form.FieldsWidget.Count; i++)
    {
        var field = form.FieldsWidget[i] as PdfSignatureFieldWidget;
        if (field != null && field.Signature != null)
        {
            Console.WriteLine("This form field has digital signature!");
        }
    }
    

    注意:我是 Spire 的员工。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 2013-06-02
      • 2017-10-22
      • 1970-01-01
      相关资源
      最近更新 更多