考虑到您需要摘要来满足某些 法律限制 ,因此,我假设您使用的是 ETSI.CAdES.detached* 或
adbe.pkcs7.detached 类型PDF签名的signed属性的值MessageDigest
(如果存在)。有符号字节范围。 *
如果要使用iText类(即 不是
安全提供程序类)来执行此 *** 作,则必须克服一个小问题,即所要获取的值存储在私有成员(
PdfPKCS7.digestAttr)中。不过,有些反射使您可以访问它:
void extractHashes(PdfReader reader) throws Exception{ AcroFields acroFields = reader.getAcroFields(); List<String> names = acroFields.getSignatureNames(); for (String name: names) { PdfPKCS7 pdfPkcs7 = acroFields.verifySignature(name); pdfPkcs7.verify(); Field digestAttrField = PdfPKCS7.class.getDeclaredField("digestAttr"); digestAttrField.setAccessible(true); byte[] digestAttr = (byte[]) digestAttrField.get(pdfPkcs7); // process the digest value in digestAttr }}
您可以找到更完整的示例ExtractHash.java中使用的方法,该示例输出最大算法和PDF文档中签名字段的摘要值,例如:
FirstPage11P0022AD_20150202164018_307494.pdf Signature1 Digest algorithm: SHA1 Hash: 4ac0ed7c2ec611d491f37b5ca74598237b85dbab
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)