【发布时间】:2015-07-17 16:51:11
【问题描述】:
如何从签名的 PDF 文件中获取签名值?我可以从签名中获取除其值之外的所有其他数据。有没有办法在 C# 中获取它?
PdfPKCS7 pk;
PdfReader reader = new PdfReader(PdfFilename);
AcroFields af = reader.AcroFields;
var names = af.GetSignatureNames();
foreach (string name in names)
{
pk = af.VerifySignature(name);
var CN_signer = iTextSharp.text.pdf.security.CertificateInfo.GetSubjectFields(pk.SigningCertificate).GetField("CN");
var C_signer = iTextSharp.text.pdf.security.CertificateInfo.GetSubjectFields(pk.SigningCertificate).GetField("C");
var CN_issuer = iTextSharp.text.pdf.security.CertificateInfo.GetIssuerFields(pk.SigningCertificate).GetField("CN");
var OU_issuer = iTextSharp.text.pdf.security.CertificateInfo.GetIssuerFields(pk.SigningCertificate).GetField("OU");
var O_issuer= iTextSharp.text.pdf.security.CertificateInfo.GetIssuerFields(pk.SigningCertificate).GetField("O");
var C_issuer = iTextSharp.text.pdf.security.CertificateInfo.GetIssuerFields(pk.SigningCertificate).GetField("C");
var nr_serial = pk.SigningCertificate.SerialNumber;
var date = pk.SignDate.ToString();
【问题讨论】:
-
签名值是指PKCS#7/CMS签名容器?
-
是的,我的意思是从签名的 pdf 文件中读取 base64 中的签名
-
@Sara 你的评论不清楚。签名不以 base64 格式存储。当您说“签名值”时,请用您自己的话解释您的意思。在 ISO-32000 的上下文中,签名值是签名字段中
/V条目的值。该值是 PDF 字典。很容易得到那本词典。如果您确认您对“签名值”的解释与 ISO-32000 中描述的签名值相同,则可以提供一个示例。 -
我不太清楚签名是如何保存在 pdf 中的,或者它在 pdf 结构中有何变化,但对于签名值,我的意思是存储在 PDF 的 /Contents 条目中的字节。也许它就像一个十六进制的值
-
@Bruno 你能帮我获取 PDF 字典吗,因为现在我阅读了 ISO-32000 文件,我认为 /v 条目的值是我正在寻找的。span>
标签: c# pdf itextsharp digital-signature