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); } }

 

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