簡體   English   中英

如何使用iTextSharp在PDF文件的簽名外觀中顯示數字簽名VALUE

[英]How to show digital signature VALUE in signature appearance of PDF file with iTextSharp

在簽署文檔時是否可以在簽名外觀中附加數字簽名VALUE,因為我正在使用這部分代碼

PdfFilename = txtFile.Text + "\\" + (string)chkLista.Items[i];
DestPdfFilename = txtFile.Text + "\\" + (string)chkLista.Items[i] + "-signed.pdf";

Org.BouncyCastle.X509.X509CertificateParser cp = new Org.BouncyCastle.X509.X509CertificateParser();
Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.RawData) };
IExternalSignature externalSignature = new X509Certificate2Signature(cert, "SHA-256");
PdfReader pdfReader = new PdfReader(PdfFilename);
FileStream signedPdf = new FileStream(DestPdfFilename, FileMode.Create);  //the output pdf file
PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0');
PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;

signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;
signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(436, 700, 564, 750), 1, "sig");

MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);

但在PDF中,它僅顯示僅填充數據的矩形,例如:數字簽名者:...和日期:...

除此之外,我也想在Base64中顯示數字簽名值!

如果我正確理解OP,則任務是顯示實際簽名值字節的base64表示形式,作為簽名字段的外觀。

這是不可能的。

原因是簽名字段的外觀是有符號字節范圍的一部分:

示例簽名PDF的結構

(在示例的第一部分或第三部分中的某個位置定義了外觀。)

因此, 在創建簽名值之前必須先知道外觀。 因此,該值不能在現場外觀中完全表示出來。

有關更多背景信息,請閱讀此答案

話雖這么說,您可能會嘗試通過向PDF添加JavaScript來作弊,這會在顯示時更改簽名字段的外觀。 但是,此方法有兩個缺點:

  • 並非所有PDF查看器都支持JavaScript。
  • 主要支持PDF的主要PDF查看器Adobe Reader和Acrobat將識別出這種外觀變化,並指出簽名已損壞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM