`
shappy1978
  • 浏览: 698397 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Verify Signature(iText)

    博客分类:
  • J2EE
 
阅读更多

http://www.berthou.com/us/2009/07/01/verify-pdf-signature-with-itext/

package com.berthou.test.pdf ;
 
import java.io.*;
import java.security.*;
import java.security.cert.Certificate;
import java.util.ArrayList;
import java.util.Calendar;
 
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;
 
public class test_pdf  {
	/**
	 * Name of the PDF document
	 */
	static String dirname  = "D:\\" ;// "D:\\"
	static String fname  = "HelloWorld_sign" ;
 
	public static void main(String[] args) {
		try {
			test_pdf.verifyPdf() ;
		}
		catch(Exception e) {
			System.err.println(e.getMessage());
		}
	}
 
	public static final boolean verifyPdf()
                   throws IOException, DocumentException, Exception
	{
		KeyStore kall = PdfPKCS7.loadCacertsKeyStore();
 
		PdfReader reader = new PdfReader(dirname + fname +".pdf");
		AcroFields af = reader.getAcroFields();
 
		// Search of the whole signature
		ArrayList names = af.getSignatureNames();
 
		// For every signature :
		for (int k = 0; k < names.size(); ++k) {
		   String name = (String)names.get(k);
  		   // Affichage du nom
		   System.out.println("Signature name: " + name);
		   System.out.println("Signature covers whole document: "
                                + af.signatureCoversWholeDocument(name));
  		   // Affichage sur les revision - version
		   System.out.println("Document revision: " + af.getRevision(name) + " of "
                                + af.getTotalRevisions());
		   // Debut de l'extraction de la "revision"
		   FileOutputStream out = new FileOutputStream("d:\\revision_"
                                + af.getRevision(name) + ".pdf");
		   byte bb[] = new byte[8192];
		   InputStream ip = af.extractRevision(name);
		   int n = 0;
		   while ((n = ip.read(bb)) > 0) out.write(bb, 0, n);
		   out.close();
		   ip.close();
		   // Fin extraction revision
 
		   PdfPKCS7 pk = af.verifySignature(name);
		   Calendar cal = pk.getSignDate();
		   Certificate pkc[] = pk.getCertificates();
		   // Information about the certificat, le signataire
		   System.out.println("Subject: "
                                + PdfPKCS7.getSubjectFields(pk.getSigningCertificate()));
		   // Le document à t'il ete modifié ?
		   System.out.println("Document modified: " + !pk.verify());
 
		   // Is the certificate avaible ? Be carefull we search the chain of certificat
		   Object fails[] = PdfPKCS7.verifyCertificates(pkc, kall, null, cal);
		   if (fails == null)
		       System.out.println("Certificates verified against the KeyStore");
		   else
		       System.out.println("Certificate failed: " + fails[1]);
		}
		return true ;
	}
}

 

分享到:
评论

相关推荐

    node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法

    发现错误 最近在用Nodejs发送https请求...Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE at SecurePair. (tls.js:1381:32) at SecurePair.emit (events.js:92:17) at SecurePair.maybeInitFinished (tls.js:980:10) at Clear

    vue-drag-verify_verify_dragVerify卡顿_thousandm5p_vue_silly9fx_

    在"vue-drag-verify_verify_dragVerify卡顿_thousandm5p_vue_silly9fx_"这个标题中,"dragVerify卡顿"可能是指在使用Vue Drag Verify组件时遇到了性能问题,可能是由于大量元素渲染或拖动操作不流畅导致的。...

    MD5Verify MD5VERIFY

    MD5Verify是一款用于验证文件完整性的工具,主要利用MD5哈希算法来检查文件是否在传输或存储过程中被篡改。MD5哈希算法是一种广泛使用的加密散列函数,能够生成一个128位(16字节)的散列值,通常表示为32个十六进制...

    Oracle 11gR2创建PASSWORD_VERIFY_FUNCTION对应密码复杂度验证函数步骤.doc

    这可以通过创建和应用`PASSWORD_VERIFY_FUNCTION`来实现。`PASSWORD_VERIFY_FUNCTION`允许我们自定义一个PL/SQL函数,该函数将在用户尝试更改密码时进行验证,确保新密码满足预设的复杂度规则。以下是在Oracle 11g ...

    UIA Verify

    "屏幕取词"是词典软件(如:金山词霸)里面一个必要功能。...微软有一个开源工具 UIA Verify 是基于UI Automation API的,该程序也有一个取词功能(菜单 Mode -&gt; Hover Mode),可以参考看看它的实现方法。

    verify code_verify_verifyappcode_android_

    "verify code_verify_verifyappcode_android_" 这个标题所指的,很可能是关于实现一个自定义验证码输入框(VercodeEditText)的源码项目。在Android应用中,这种控件通常具有特殊的格式要求,如限制输入字符数量、...

    apksigner.jar

    Original error: Cannot verify the signature of 'C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-uiautomator2-server\apks\appium-uiautomator2-server-v4.21.1.apk'....

    deepin-elf-verify-1.1.10-1 mips64 龙芯 依赖库

    deepin-elf-verify-1.1.10-1 mips64 龙芯 依赖库

    verify.js纯前端验证码插件

    verify.js纯前端验证码插件。 这是一款极简洁的表单校验插件,属于半封装模式,只需引入插件,即可任意编写业务逻辑代码,简单方便易修改。

    Laravel开发-verify

    在本文中,我们将深入探讨Laravel开发中的"verify"概念,特别是针对Laravel 4和5版本的身份验证机制。Laravel作为一个优雅的PHP框架,提供了丰富的功能,包括强大的身份验证工具,使得开发者能够轻松地处理用户认证...

    jQuery多种验证码插件verify.js.zip

    《jQuery验证码插件verify.js深度解析》 在Web开发中,验证码已经成为不可或缺的安全机制,用于防止恶意自动化的机器人操作,如防止垃圾邮件、刷票等。jQuery作为一个轻量级、高性能的JavaScript库,提供了丰富的...

    deepin-elf-verify-0.0.16.10-1-arm64 UOS依赖包 ARM UOS鲲鹏依赖包

    deepin-elf-verify_0.0.16.10-1_arm64 UOS依赖包 ARM UOS鲲鹏依赖包

    deepin-elf-verify-0.0.16.10-1-amd64 uos兆芯,intel,amd依赖包

    deepin-elf-verify_0.0.16.10-1_amd64 uos兆芯,intel,amd依赖包

    tfgg-verify_1.0.1.zip

    &lt;tfgg-verify @result='verifyResult' ref="verifyElement"&gt;&lt;/tfgg-verify&gt; import tfggVerify from "@/components/tfgg-verify/tfgg-verify.vue"; export default { components: { "tfgg-verify":tfggVerify ...

    verify公共函数(陈攀).js

    verify公共函数(陈攀).js。verify公共函数(陈攀).js。verify公共函数(陈攀).js。verify公共函数(陈攀).js。

    deepin-elf-verify_0.2.14.5-1_mips64el.deb

    依赖关系不满足:deepin-elf-verify,(修改版本号骗过验证,实际为0.0.14.5-1)

    deepin-elf-verify-1.1.10-1-amd64 amd,intel,兆芯 UOS依赖包

    deepin-elf-verify_1.1.10-1_amd64 amd,intel,兆芯 UOS依赖包

    test_rsa.rar_RSA_verify_openssl_rsa_rsa verify_verify_rsa

    标题中的“test_rsa.rar_RSA_verify_openssl_rsa_rsa verify_verify_rsa”表明这是一个关于RSA公钥密码体制在OpenSSL环境中验证签名的示例或教程。在描述中提到的“openssl rsa pubkey verify”则指使用OpenSSL工具...

    verify验证表单的插件

    本文将深入探讨"verify验证表单的插件",并围绕JavaScript开发中的表单验证进行详细讲解。 "verify验证表单的插件"是一个专门用于表单验证的JavaScript库,它的核心目标是简化和标准化表单验证过程。通过使用这个...

Global site tag (gtag.js) - Google Analytics