签名文档时是否可以在签名外观中附加数字签名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中显示数字签名值!
答案 0 :(得分:1)
如果我正确理解OP,则任务是将实际签名值字节的base64表示显示为签名字段外观。
这是不可能的。
原因是签名字段的外观是签名字节范围的一部分:
(外观在示例的第一或第三部分的某处定义。)
因此,在创建签名值之前必须知道外观 。因此,该值无法在字段外观中完全表示。
有关更多背景,请阅读this answer。
话虽如此,您可能会尝试通过向PDF添加JavaScript来作弊,显示时间会更改签名字段的外观。不过,这种方法有两个缺点: