gpt4 book ai didi

c# - 使用 iTextSharp 签署 pdf 文件后更改签名外观

转载 作者:太空宇宙 更新时间:2023-11-03 21:36:40 35 4
gpt4 key购买 nike

我正在写一个服务,我用一个空容器预先签署一个 pdf 文件,从 pdf 文件中获取一个字节范围的散列并将它发送到另一个服务,这将允许用户使用一部手机。我取回了一个证书,我将把它注入(inject)到预签名 pdf 文件中的签名容器中。

到目前为止一切正常,除了我想在文档中有可见的签名。可见签名需要证书从中获取信息(例如谁签名以及何时签名),但似乎我需要在实际签名之前添加可见签名。

因此,我的问题是,是否可以在签名后更改文档中签名的外观?可见的签名图像似乎超出了文档的签名字节范围。

我正在使用一个空白容器对文件进行预签名:

IExternalSignatureContainer external = new ExternalBlankSignatureContainer(PdfName.ADOBE_PPKLITE,                                                                                 PdfName.ETSI_CADES_DETACHED);
MakeSignature.SignExternalContainer(_sap, external, 8192 * 2);

其中 _sap 是按以下方式初始化的压模的 SignatureAppearance:

PdfStamper stamper = PdfStamper.CreateSignature(reader, baos, '\0', null, true);

从 SignatureAppearance 返回字节范围的哈希:

Stream data = _sap.GetRangeStream();
_hash = DigestAlgorithms.Digest(data, DigestAlgorithms.SHA1);
_hashStr = Convert.ToBase64String(_hash);
return _hashStr;

然后当我获得认证时,我创建了一个自定义容器:

IExternalSignatureContainer container = new CustomContainer(cert);
MakeSignature.SignDeferred(reader, _signatureFieldName, baos, container);

除了在它的 public byte[] Sign(Stream data) 方法中返回 cert 外,自定义容器什么都不做。

签名本身有效,数字签名有效,但我只需要更改可见签名本身的文本。我认为这是可能的,因为可见签名实际上与证书本身没有任何关系,它只是为了方便地显示证书中的名称,尤其是在有多个签名的情况下。

最佳答案

您写的是对的:看来我需要在实际签名之前添加可见签名。您写的是错误的:我认为这是可能的。

签名的外观由存储在PDF文档中的字典和流组成。这些对象是经过哈希处理并随后签名的字节的一部分。您不能在不破坏签名的情况下更改这些字节。

关于c# - 使用 iTextSharp 签署 pdf 文件后更改签名外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21410465/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com