繁体   English   中英

使用iTextSharp对pdf文件签名后更改签名外观

[英]Changing signature appearance after signing pdf file with iTextSharp

我正在编写一项服务,在该服务中,我用一个空容器对pdf文件进行预签名,从pdf文件中获取字节范围的哈希值,然后将其发送给另一项服务,该服务将允许用户使用手机对哈希值进行签名。 我取回了一个证书,该证书将注入到预先签名的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文档中的字典和流组成。 这些对象是经过哈希处理并随后签名的字节的一部分。 您不能在不破坏签名的情况下更改这些字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM