使用iText对PDF文件签章和验章

  PDF是国际板式文件标准,使用的范围很广。OFD为国产板式文件标准,设计起点很高,天然支持国产签名算法(SM2、SM3);具有后发优势,目前市场占有率仍然很低,前途光明而又漫长。PDF标准并不支持国产签名算法;但是,可以通过扩展达到支持的目的。PDF、OFD两者签名处理逻辑差异很大,关于ofd签名可以参见我写的其他文章。今天主要介绍通过itext,用国产签名算法实现对pdf的签名。

      签名相关的两个概念:签名的保护范围和签名值。签名的保护范围确定了pdf中哪些内容不能更改,如果被更改验证就不同过。签名值:对保护范围的数据做哈希运算后,再用私钥签名生成的一段数据。

    对已签名的pdf文件剖析

  

 

 通过上图,就能大概明白:签名后,文件哪些数据做了修改。

 采用itext实现签名

 

 由于pdf不支持国产签名算法,必须通过接口回调的方式实现签名。首先要实现接口IExternalSignatureContainer。

 

我们的主要工作就是实现该接口,其他工作itext帮我们完成了。

采用itext实现验签

实现验签就必须获取签名的保护范围和签名值。看pdf内部结构:

下面的代码就是获取这两个值:

 通过itext获取这两个值并不难,后期如何验证签名就完全取决于我们。

后记:从上面分析可以看出,pdf是可以支持国产加密算法的;由于国产加密算法不是pdf标准的一部分,阅读器对国产加密算法支持不是很好。ofd恰好弥补了pdf的不足,希望ofd的使用范围越来越广,在数字化建设中占有一席之地。

posted @ 2022-09-15 17:13  源之缘-OFD先行者  阅读(2841)  评论(0编辑  收藏  举报
关注我