使用Java将数字签名添加到PDF

raj*_*utu 8 java digital-signature e-token

我想使用存储在USB令牌,HSM等上的证书对PDF文件进行数字签名.如何使用JAVA使用存储在USB令牌上的私钥?

Ste*_*ell 8

对于iText的自我引用,我会补充说


AVA*_*AVA 7

将数字签名添加到PDF文件中涉及的步骤:

(I)创建模板PDFDocument:

使用模板签名创建PDFDocument:

PDSignature pdSignature;
pdSignature.setByteRange(new int[]{0, 0, 0, 0});
pdSignature.setContents(new byte[n*1024]);
Run Code Online (Sandbox Code Playgroud)

其中n是整数,即kbs的倍数.

注意:内容大小应大于或等于签名和证书文件长度的总和.

(II)更新模板PDF文档:

(a)更新/字节范围[abcd] :(
i)a ="%PDF"中的偏移%(默认情况下= 0)
(ii)b = <in"/ Contents <000 ... 000>的偏移量"
(iii)c =在"/ Contents <000 ... 000>"中
偏移>> (iv)d ="%% EOF"中的F偏移减去上面的c

(b)更新外部参照部分:
更新交叉引用表(外部参照部分),它指定对象的位置和

(c)更新startxref部分:
update startxref,它是交叉引用表(xref)的起始偏移量.

(III)生成更新的模板文档的数字签名:
生成更新的模板文档,不包括"/ Contents <000 ... 000>"的临时签名数据("000 ... 000")

(IV)更新内容<>部分:
使用模板PDFFile的签名数据(Enveloped)替换"/ Contents <000 ... 000>"中的签名数据长度的一个/初始"0".

建议:

使用PDFBox的SignatureInterface:

(a)实现SignatureInterface调用sign()方法(b)提供输入,输出文件,密钥库,别名,pin(c)做保存incrment

(或)使用任何java pdf库(如iText ...)

(或)自己在Java中实现步骤I-IV.


Bru*_*gie 4

似乎您想使用 USB 令牌、智能卡或硬件安全模块对 PDF 进行数字签名。这是通过 PKCS#11 完成的,如http://itextpdf.com/book/digitalsignatures中所述。您可以在此处找到源代码。示例展示了如何使用 SafeNet iKey 400 USB 令牌进行签名。