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

本文介绍了如何使用iText库结合国产签名算法(SM2、SM3)对PDF进行签名。PDF标准本身不直接支持这些算法,但可以通过扩展实现。文章详细阐述了签名的保护范围和签名值的概念,并提供了通过iText进行签名和验签的实现步骤,强调了PDF支持国产加密算法的潜力以及OFD在数字化建设中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

    对已签名的pdf文件剖析

  

 

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

 采用itext实现签名

 

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

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

采用itext实现验签

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

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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值