我正在写一个服务,其中我用一个空容器对PDF文件进行了预签名,从pdf文件中取一个字节范围的哈希值并将其发送到另一个服务,将允许用户使用移动电话签名哈希。我将取回一张证书,我将在预签署的pdf文件中注入签名容器。使用iTextSharp签署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);
的返回BYTERANGE的哈希来自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);
自定义容器没有做任何事情,除了返回cert
在它的public byte[] Sign(Stream data)
方法。
签名本身起作用,数字签名是有效的,但我只需要更改可见签名本身的文本。我认为这是可能的,因为可见签名实际上与证书本身没有任何关系,只是方便地显示证书中的名称,特别是使用多个签名。
我已经多次阅读过这个问题,但我不太清楚,签名后为什么必须更改签名的呈现方式。用户证书在实际签名之前是可用的,因此所有需要的信息都可以在准备步骤中添加到可视化演示中,以消除与签署后更改任何内容有关的所有问题 – divanov