Java获取pdf文件签名信息

获取签名规则、签名时间、签名者、签名结果、证书、证书引证、签名算法标识

引入com.itextpdf

private
static void pdfVerifyForXndx(FileAttribute fileAttribute) throws Exception { PdfReader pdfReader = new PdfReader(fileAttribute.getPath()); AcroFields acroFields = pdfReader.getAcroFields(); List<String> signatureNames = acroFields.getSignatureNames(); if(org.apache.commons.collections.CollectionUtils.isNotEmpty(signatureNames)){ String names = String.join(",", signatureNames); String signatureName = signatureNames.get(0); PdfDictionary signatureDictionary = acroFields.getSignatureDictionary(signatureName); //签名者姓名 PdfString name = signatureDictionary.getAsString(PdfName.NAME); String nameStr = name != null ? name.toString() : null; fileAttribute.setSigner(nameStr); //签名日期 PdfString asName = signatureDictionary.getAsString(PdfName.M); String MStr = asName != null ? asName.toString() : null; fileAttribute.setSignatureTime(MStr); //签名证书 -指定用于签署文档的证书。它包含证书序列号、有效期和颁发机构等信息。 PdfString cert = signatureDictionary.getAsString(PdfName.CERT); String certStr = cert != null ? cert.toUnicodeString(): null ; fileAttribute.setCertificate(certStr); //签名规则 PdfName filter = signatureDictionary.getAsName(PdfName.FILTER); //签名算法标识 SubFilter --指定用于解密签名数据的解密算法名称 PdfName subFilter = signatureDictionary.getAsName(PdfName.SUBFILTER); String signatureRule =""; if (PdfName.ADOBE_PPKLITE.equals(filter) && PdfName.ADBE_PKCS7_DETACHED.equals(subFilter)) { signatureRule ="Detached signature with PKCS#7 format."; } else if (PdfName.ADOBE_PPKMS.equals(filter) && PdfName.ADBE_PKCS7_SHA1.equals(subFilter)) { signatureRule ="PKCS#7 signature with SHA-1 digest."; }else if(PdfName.XML.equals(filter) && PdfName.ADBE_X509_RSA_SHA1.equals(subFilter)){ signatureRule ="XML Digital signature with adbe.x509.rsa_sha1."; } else { signatureRule =filter +" "+subFilter; } fileAttribute.setSignatureRule(signatureRule); //签名结果 BYTERANGE -通常用于验证签名的完整性 String byterangeStr =""; PdfArray byterange = signatureDictionary.getAsArray(PdfName.BYTERANGE); if(byterange != null && byterange.size() > 0){ for (int i = 0; i < byterange.size(); i++) { PdfObject obj = byterange.getPdfObject(i); // 获取数组中的元素 byterangeStr += String.valueOf(obj) +" "; } } fileAttribute.setSignatureResult(byterangeStr); //证书引证 PdfString asName1 = signatureDictionary.getAsString(PdfName.CONTACTINFO); PdfName asName2 = signatureDictionary.getAsName(PdfName.CRL); PdfName asName3 = signatureDictionary.getAsName(PdfName.OCSP); String asName1Str = asName1 != null ? asName1.toUnicodeString(): null ; String asName2Str = asName2 != null ? asName2.toString(): null ; String asName3Str = asName3 != null ? asName3.toString(): null ; fileAttribute.setCertificateRuote(asName1Str + " " +asName2Str+" "+asName3Str); } }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章