首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多重签名验证与AcroFields.SignatureCoversWholeDocument方法

多重签名验证与AcroFields.SignatureCoversWholeDocument方法
EN

Stack Overflow用户
提问于 2015-09-04 08:23:43
回答 1查看 1.2K关注 0票数 1

pdf签名验证代码:

代码语言:javascript
复制
    public bool ValidateFileSignatures(Stream stream)
    {
        stream.Seek(0, SeekOrigin.Begin);
        PdfReader reader = new PdfReader(stream);

        AcroFields af = reader.AcroFields;
        var names = af.GetSignatureNames();
        if (names.Count == 0)
            return false; // no signatures

        foreach (string name in names)
        {
            if (!af.SignatureCoversWholeDocument(name))
            {
                return false;
            }

            PdfPKCS7 pk = af.VerifySignature(name);

            X509Certificate[] pkc = pk.Certificates;

            if (!pk.Verify())
            {
                return false;
            }
        }

        return true;
    }

当我们第一次签署文件时,一切都很好。但是,如果文档签名了两次,就会有两个带有签名的字段,对于第一个字段,方法af.SignatureCoversWholeDocument(name)返回false,第二个为true。Pdf由示例中的方法签名(参见SignTest方法)。当我们第二次签名时,附加的第4个参数"append“被传递给这个调用:PdfStamper.CreateSignature(reader, os, '\0', true);

如何使SignatureCoversWholeDocument方法对所有签名都有效?或者这是不可能的,我需要删除这张多个签名文件的支票?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-04 08:37:25

当您第一次签名时,第一个签名涵盖了整个文档。到目前一切尚好。

当您第二次签名时,第一个签名不再涵盖整个文档。这应该很容易理解:第一个签名不包括添加到文档中的第二个签名,因此第一个签名并不包括整个文档。只有第二个签名涵盖整个文件。

你是在解释一个不是问题的问题,只是你自己的误解。

看一看这张图片:

第一个签名涵盖第1版,但不包括整个文档。第二个签名包括第2版,包括第1版,但不包括整个文件。第三份签名涵盖第三版,包括第一版和第二版,还包括整个文件。

这就是数字签名在PDF中的工作方式。如果您需要更多信息,请阅读ISO-32000-1或PAdES标准.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32393404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档