繁体   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