簡體   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